MongoDB高階索引


在這一章節中,我們來學習高階索引,假設users集合的以下文件 -

{
   "address": {
      "city": "Haikou",
      "province": "Hainan",
      "pincode": "123456"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Maxsu"
}

上述文件包含地址子文件和標籤陣列。

索引陣列欄位

假設要根據使用者的標籤搜尋使用者文件。為此,我們將在集合中的tags陣列上建立一個索引。

在陣列上建立一個索引依次為每個欄位建立單獨的索引條目。所以在這個例子中,當在tags陣列上建立一個索引時,將為其值musiccricketblogs建立單獨的索引。

要在tags陣列上建立索引,請使用以下程式碼 -

>db.users.ensureIndex({"tags":1})

建立索引後,可以搜尋這個集合的標籤欄位 -

>db.users.find({tags:"cricket"})

要驗證是否使用正確的索引,請使用以下說明命令 -

>db.users.find({tags:"cricket"}).explain()

上面的命令生成:「cursor」:「BtreeCursor tags_1」,它確認使用了正確的索引。

索引子文件欄位

假設要搜尋基於cityprovincepincode欄位的文件。 由於所有這些欄位都是地址子文件欄位的一部分,因此將在子文件的所有欄位上建立一個索引。

要在子文件的所有三個欄位上建立索引,請使用以下程式碼 -

>db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

建立索引後,就可以使用此索引來搜尋任何子文件的欄位了,如下所示:

>db.users.find({"address.city":"Haikou"})

請記住,查詢表示式必須遵循指定的索引的順序。 所以上面建立的索引將支援以下查詢 -

>db.users.find({"address.city":"Haikou","address.province":"Hainan"})

它還將支援以下查詢 -

>db.users.find({"address.city":"Haikou","address.province":"Hainan",
   "address.pincode":"12345"})