2012-03-28 118 views
3

,比如我有这样的文件集富:MongoDB的索引(ensureIndex)

{"tag_cloud":[{"value":"games", "count":10}, {"value":"girls", "count":500}]} 
{"tag_cloud":[{"value":"games", "count":5}, {"value":"stack", "count":100}]} 
{"tag_cloud":[{"value":"mongodb", "count":1000}, {"value":"thread", "count":15}]} 

两类指标之间有什么区别:

  1. ensureIndex({ “tag_cloud”})
  2. ensureIndex({“tag_cloud.value”}); ensureIndex({ “tag_cloud.count”})

在请求上下文:

db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1}); 

谢谢!

回答

4

MongoDB每次查询一次只能使用一个索引,所以你建议创建两个索引不起作用。相反,我会创建一个复合索引:

> db.foo.ensureIndex({"tag_cloud.value": 1, "tag_cloud.count": -1}) 

该指标既可以采用过滤为仅要考虑特定的要素,然后又返回按降序排序顺序:

> db.foo.find({"tag_cloud.value":"games"}).sort({"tag_cloud.count":-1}).explain() 
{ 
    "cursor" : "BtreeCursor tag_cloud.value_1_tag_cloud.count_-1", 
    "isMultiKey" : true, 
    "n" : NumberLong(2), 
    "nscannedObjects" : NumberLong(2), 
    "nscanned" : NumberLong(2), 
    ... 
+0

dcrosta谢谢!!!;) – Edward83 2012-03-29 04:46:13