2012-03-16 46 views

回答

37

你會創建它們,就像如果你是一個頂級場創建索引:

db.collection.ensureIndex({"attrs.nested.value": 1}) 

你需要在每個領域明確創建索引。

1

A.索引所有的 「嵌套」 你將不得不指數分別它們的屬性:

db.collection.createIndex({"attrs.nested.value": 1}); 
db.collection.createIndex({"attrs.nested.valuetwo": 1}); 

這可以在一個命令來完成與:

db.collection.createIndex({"attrs.nested.value": 1, "attrs.nested.valuetwo": 1}); 

僅索引「valueetwo」:

db.collection.createIndex({"attrs.nested.valuetwo": 1}) 

使用createIndex超過ensureIndex作爲ensureIndex是Deprecated since version 3.0.0

+4

您在A中給出的兩組索引創建命令是* not *等價。第一個創建'value'和'valuetwo'的單獨索引。第二個在這兩個值上創建單個複合索引。該索引只能用於爲'value'指定值的查詢。也就是說,它對於單獨查詢'valuetwo'沒有用處。 – 2016-05-26 10:58:45

2

如果任何索引字段是一個數組的MongoDB自動創建多鍵索引;您不需要明確指定多鍵類型。

這兩個場景的 db.coll.createIndex工作({ 「addr.pin」:1})

方案1個嵌套對象

{ 
userid:"1234", 
addr: { 
     pin:"455522" 
    } 
}, 
{ 
userid:"1234", 
addr: { 
     pin:"777777" 
    } 
} 

方案2個嵌套數組

{ 
userid:"1234", 
addr: [ 
    pin:"455522", 
    pin:"777777", 
] 
} 

https://docs.mongodb.com/manual/core/index-multikey/