2013-11-24 47 views
0

我用下面的骨料和想看看有什么会是这个建议的索引:MongoDB的索引集料

{ 
    "$match" : 
     { 
      user : ObjectId(user_id), 
      type : 'item' 
      } 
     }, 
    { "$group" : { 
     _id : "$user", 
     size : { "$sum" : "$size" } 
    } 
} 

难道是太多或必要对用户和类型复合索引,那么_id和size的另一个复合索引?

回答

2

您不能创建一个按照您描述的方式工作的索引。在运行聚合时,没有办法“管理”管道步骤的某个输出。

有几个聚合运算符can work with MongoDB collection indexes

目前,它们包括:$match$sort,$limit$skip

由于$match就是其中之一,你写的可以通过在两个字段声明一个复合索引有利于聚集查询的性能,尤其是当你正确放置$match在管道的开头:

db.theCollection.ensureIndex({user: 1, type: 1}) 

$group踩在管道会从$match结果和理想,相对较快。 :)

1

虽然用户和类型的复合索引可能会有所帮助,但_id和大小的索引绝对不必要。您必须将索引放置在您计划进行搜索的字段中。在这里,您正在搜索用户和类型字段,然后将您在其他字段中找到的内容分组。

不要忘记检查您的索引是否使用explain执行。