MongoDB Aggregation,有没有办法从聚合游标中获取executionStats?

时间:2015-08-12 16:23:07

标签: mongodb

我正在使用MongoDB 3.0.4,我有一个数据库,我想聚合数据。这个问题,需要的时间比它应该的要长。我完成了我的作业(至少我猜到了),我看到了函数explain()以及关于聚合和索引优化的大量提示,但即便如此,我仍然怀疑。

最让我烦恼的是我无法在聚合光标上正确使用explain()函数。当然,您可以选择直接传递给聚合函数,但它不允许您更改详细程度。

我可以使用find()。explain(“executionStats”)。有用。我还使用了强制聚合返回游标的选项。然而,我不能做任何形式的事情:

db.coll.aggregate( ... { cursor : { batchSize : 0}}).explain("executionStats")

var a = db.coll.aggregate( ... { cursor : { batchSize : 0}}) a.explain("executionStats")

另一方面:

db.coll.explain("executionStats").aggregate( ... )

有效,但使用了错误的冗长程度,我无法得到我想要的信息......

所以,实际的查询是:

`
db.pmsi.aggregate([
{ $match : { $GHM_Obtenu : { $in : ["040M51", "04M052"] } } },
{ $project : { "_id" : 0, "$GHM_Obtenu" : 1 } },
{ $group : {
    _id : { "$GHM_Obtenu" },
    count : { $sum : 1 } }
}
],{
    cursor : { batchSize : 0 }
})`

对于那些想知道的人,“GHM_Obtenu”字段有一个索引。

无论如何,问题仍然存在: 有没有办法从聚合请求中获取executionStats?

我感谢你花时间阅读我的问题,我希望我没有错过任何太明显的事情。

干杯!

2 个答案:

答案 0 :(得分:0)

从mongodb documentation,您可以运行{explain:true}作为聚合选项。

db.collection.aggregate(pipeline, options)¶

答案 1 :(得分:0)

我在3.4版上找到了一种方法。我用了db.setProfilingLevel(2) 然后,我在system.profile()集合中获得了所需的统计信息。

这是我发现在较新版本上获取通过explain(“ executionStats”)获得的诸如“ docsExamined”之类的唯一方法。