mongodb - 查看长时间运行的 mongodb 聚合作业的进度

标签 mongodb aggregation-framework

我有一个使用 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

(我希望 nInsertedkeysInserted 表示进度,但似乎并非如此;临时集合中的文档计数是一个更准确的进度指示器。)

关于mongodb - 查看长时间运行的 mongodb 聚合作业的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22725814/

相关文章:

javascript - 填充有限数量的文档

javascript - 指令调用后加载来自 MongoDB 的数据

javascript - 从 mongo 返回纯 json 对象的问题

mongodb - Mgo 聚集体 : how to reuse model types to query and unmarshal "mixed" results?

MongoDb 聚合 $count 以显示 0

javascript - 在meteor中使用MongoDB聚合时无法得到正确的结果

java - Spring data mongodb-复制集合

mongodb - 每个桶的顶级文档

mongodb - 无法获取allowDiskUse :True to work with pymongo

node.js - MLab 和环回 ACL - 有很多 (POST)