我有一个以 $merge 阶段结束的聚合管道。
db.collection("mycoll").aggregate([..., {$merge:{into:"myview"}}])
我必须在运行时生成物化视图并让它们保持最新的变化。
我面临的问题是,如果 $merge 尚未完成,并且我尝试对目标集合运行更新,它只会更新已合并的文档,而其余文档将插入过时的值。
为了解决此问题,我需要在合并运行时延迟或阻止更新。
我似乎无法找到一种方法来知道合并何时完成。
使用 $merge 时聚合返回的游标为空,因此我无法使用游标进行跟踪。
查看 currentOp 似乎没有显示 $merge 的聚合,仅显示合并正在进行的每个文档的单独更新。
我如何知道合并何时完成?
我发现我可以向我的聚合添加注释,并且它由 Mongo 在 $currentOp 输出中来自该聚合的所有更新中传播。
所以我可以在我的 $merge 聚合中添加评论,如下所示:
db.collection("mycoll").aggregate([..., {$merge:{into:"myview"}}], comment:"mycomment"});
稍后使用 $currentOp 搜索它,如下所示:
db.getSiblingDB("admin").aggregate([{$currentOp:{}},{$match:{"command.comment":"mycomment"}},{$limit:1}]);