2012-03-28 6 views
3

私はそのような文書の収集FOOを持っている:の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}]} 

は、どのようなインデックスの2種類の違い:

  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では、クエリごとに1つのインデックスしか使用できないため、2つのインデックスを作成することはできません。その代わり、私は、複合インデックスを作成します。

> 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

関連する問題