MongoDB 教學課程login
MongoDB 教學課程
作者:php.cn  更新時間:2022-04-21 17:49:03

MongoDB 高級索引


考慮以下文件集合(users ):

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

以上文件包含了 address 子文件和 tags 陣列。


索引數組欄位

假設我們基於標籤來檢索用戶,為此我們需要對集合中的陣列 tags 建立索引。

在陣列中建立索引,需要對數組中的每個欄位依序建立索引。所以當我們為陣列 tags 建立索引時,會為 music、cricket、blogs三個值建立單獨的索引。

使用以下指令建立陣列索引:

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

建立索引後,我們可以這樣檢索集合的tags 欄位:

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

為了驗證我們使用使用了索引,可以使用explain 指令:

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

以上指令執行結果中會顯示"cursor" : "BtreeCursor tags_1" ,則表示已經使用了索引。


索引子文檔欄位

假設我們需要透過city、state、pincode欄位來檢索文檔,由於這些欄位是子文檔的欄位,所以我們需要對子文檔建立索引。

為子文檔的三個欄位建立索引,命令如下:

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

PHP中文網