我有一个使用 Mongodb (2.6.0-rc2
) 聚合框架的长期工作:http://docs.mongodb.org/manual/core/aggregation-introduction/
我已经用 javascript 编写了聚合并将作业作为脚本运行
(即 mongo localhost:27017/test myjsfile.js
)。
启动脚本后,有什么方法可以查看作业的进度吗?
例如,使用示例聚合作业:
db.zipcodes.aggregate([
{$group: {
_id: "$state",
totalPop: {$sum: "$pop"}
}},
{$match: {totalPop: {$gte: 10*1000*1000 }}}
])
我希望看到该工作目前正在执行一个小组,并且完成了 70%。
对于 mongo 的 map reduce 作业,您可以通过 db.currentOp()
查看进度,其中有一个进度字段,显示作业完成的百分比,如本文所述:
Is it possible to get map reduce progress notifications in mongo?
聚合有什么类似的吗?
最佳答案
如果您使用 $out
聚合管道运算符将聚合结果输出到另一个(或 the same )集合,您可以打开一个新的 mongo shell 并查看新集合中有多少文档。如果您要覆盖要从中聚合的集合,MongoDB 将使用临时集合名称以使操作具有原子性,例如 tmp.agg_out.1
。所以,运行
db['tmp.agg_out.1'].count()
要找出临时集合的确切名称,您可以跟踪当前的 MongoDB log并注意有关聚合的消息。 mLab 和其他云 MongoDB 托管服务提供商可能也有一个方便的“流当前日志”选项。
例如,在 this answer 中运行查询时,相关的日志消息可能如下所示:
2019-04-05T03:55:42.126-0700 I COMMAND [conn244209] command collection.tmp.agg_out.1 appName: "MongoDB Shell" command: insert { insert: "tmp.agg_out.1", ordered: true, $db: "mydb" } ninserted:18145 keysInserted:351002 numYields:0 locks:{ Global: { acquireCount: { r: 70917, w: 61737 } }, Database: { ... }, Collection: { ... }, Metadata: { ... }, oplog: { ... } protocol:op_msg 161451ms
(我希望 nInserted 或 keysInserted 表示进度,但似乎并非如此;临时集合中的文档计数是一个更准确的进度指示器。)
关于mongodb - 查看长时间运行的 mongodb 聚合作业的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725814/