我使用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?
聚合有什么相似之处吗?
答案 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
(我希望nInserted或keysInserted会指示进度,但事实并非如此;临时集合中文档的数量是一个更为准确的进度指示器)