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

时间:2014-03-29 01:22:58

标签: 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的地图缩减作业,您可以通过db.currentOp()查看进度,其中有一个进度字段,显示已完成作业的百分比,如本文所述:

  

Is it possible to get map reduce progress notifications in mongo?

聚合有什么相似之处吗?

2 个答案:

答案 0 :(得分:2)

尝试db.currentOp()将返回数据库实例的正在进行的操作

了解详情http://docs.mongodb.org/v3.0/reference/method/db.currentOp/

答案 1 :(得分:1)

如果您使用$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我COMMAND [conn244209]命令 collection.tmp.agg_out.1 appName:“ MongoDB Shell”命令:insert {插入:“ tmp.agg_out .1“,已排序:true,$ db:“ mydb”}插入:18145 keysInserted:351002 numYields:0锁:{全局:{acquisitionCount:{r:70917,w:61737}},数据库:{...} ,集合:{...},元数据:{...},操作日志:{...}协议:op_msg 161451ms

(我希望nInsertedkeysInserted会指示进度,但事实并非如此;临时集合中文档的数量是一个更为准确的进度指示器)