有没有一种很好的方法可以在Mongo的大型集合中获得不同的值?

Clé*_*ier 9 distinct mongodb

我尝试获取大型集合中给定字段的所有不同值(少于10个可能的值)(3.500.000文档,35gb).

我试图用a得到这些值db.collection.distinct('field'),但它很慢,即使有一个索引(它似乎没有被使用).

有关提高此查询性能的建议吗?

谢谢

编辑 我使用的是Mongo 2.4.9.它已在2.5.5(https://jira.mongodb.org/browse/SERVER-2094)中修复,但db.logs.distinct( "version", {wsId: "XXX" })即使两个字段都存在索引,我仍然会对此类查询产生性能问题.

ale*_*dev 7

"distinct"如果可用,则使用索引.像这样运行它,看看是否正在使用索引:

db.runCommand({distinct: "collectionNameGoesHere", key:"fieldNameGoesHere"})
Run Code Online (Sandbox Code Playgroud)

返回结果集中的最后一个值是如下所示的统计信息:

   "stats" : {
           "n" : 280,
           "nscanned" : 280,
           "nscannedObjects" : 0,
           "timems" : 0,
           "cursor" : "BtreeCursor class_id_1"
   }
Run Code Online (Sandbox Code Playgroud)

请注意,我的查询在class_id字段上使用了索引,因为我已经预先制作了它.

  • 我使用了db.runCommand({distinct:"collectionNameGoesHere",key:"fieldNameGoesHere"})但收到了错误消息.errmsg异常:明显太大,16mb上限 (2认同)