MongoDB高級索引
考慮以下文檔中的用戶集合:
{ "address": { "city": "Los Angeles", "state": "California", "pincode": "123" }, "tags": [ "music", "cricket", "blogs" ], "name": "Tom Benzamin" }
上述文檔中包含一個 address 子文檔 和 標簽數組.
索引數組字段:
假設我們要搜索基於用戶文檔的標簽。對於這一點,我們將在集合中創建一個索引的標簽數組。
創建索引在數組上,依次創建它的每個字段的單獨索引條目。因此,在我們的例子中,當我們在標簽數組創建一個索引,單獨將創建 music,cricket和blogs 其值的索引。
要創建標簽數組的索引,使用下麵的代碼:
>db.users.ensureIndex({"tags":1})
在創建索引之後,我們可以像這樣在集合中搜索標簽字段:
>db.users.find({tags:"cricket"})
要驗證正確的索引時,使用以下 explain 命令:
>db.users.find({tags:"cricket"}).explain()
以上的 explain 命令將 "cursor" : "BtreeCursor tags_1" 證實了正確的索引使用。
索引子文檔字段:
假設我們要根據城市,州和PIN碼字段來搜索文檔。由於所有這些字段都是地址子文檔字段的一部分,我們將在子文檔創建所有字段的索引。
關於子文檔的三個字段創建索引,使用下麵的代碼:
>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
一旦索引被創建,我們可以利用該索引搜索任何子文檔字段組成,如下:
>db.users.find({"address.city":"Los Angeles"})
請記住,查詢表達式必須遵循指定索引的順序。 所以上麵創建的索引將支持以下查詢:
>db.users.find({"address.city":"Los Angeles","address.state":"California"})
它還支持以下查詢:
>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})