我正在使用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?
我感谢你花时间阅读我的问题,我希望我没有错过任何太明显的事情。
干杯!
答案 0 :(得分:0)
从mongodb documentation,您可以运行{explain:true}作为聚合选项。
db.collection.aggregate(pipeline, options)¶
答案 1 :(得分:0)
我在3.4版上找到了一种方法。我用了db.setProfilingLevel(2) 然后,我在system.profile()集合中获得了所需的统计信息。
这是我发现在较新版本上获取通过explain(“ executionStats”)获得的诸如“ docsExamined”之类的唯一方法。