位置:首頁 > 數據庫 > MongoDB基礎教程 > MongoDB高級索引

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"})