鍍金池/ 教程/ 數(shù)據(jù)庫/ 高級索引
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級索引
索引
優(yōu)勢
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫
固定集合
關(guān)系
聚合
自動增長
復(fù)制
限制記錄
部署
分片
正則表達式
原子操作

高級索引

假如一個 users 集合中具有下列文檔:

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

上述文檔包含一個地址子文檔(address sub-document)與一個標(biāo)簽數(shù)組(tags array)。

索引數(shù)組字段

假設(shè)我們想要根據(jù)標(biāo)簽來搜索用戶文檔。首先在集合中創(chuàng)建一個標(biāo)簽數(shù)組的索引。

反過來說,在標(biāo)簽數(shù)組上創(chuàng)建一個索引,也就為每一個字段創(chuàng)建了單獨的索引項。因此在該例中,當(dāng)我們創(chuàng)建了標(biāo)簽數(shù)組的索引時,也就為它的music(音樂)、cricket(板球)以及 blog(博客)值創(chuàng)建了獨立的索引。

使用下列命令創(chuàng)建標(biāo)簽數(shù)據(jù)的索引:

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

創(chuàng)建完該索引后,按照如下方式搜索集合中的標(biāo)簽字段:

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

為了驗證所使用索引的正確性,使用 explain 命令,如下所示:

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

上述 explain 命令的執(zhí)行結(jié)果是 "cursor" : "BtreeCursor tags_1",表示使用了正確的索引。

索引子文檔字段

假設(shè)需要根據(jù)市(city)、州(state)、個人身份號碼(pincode)字段來搜索文檔。因為所有這些字段都屬于地址子文檔字段的一部分,所以我們將在子文檔的所有字段上創(chuàng)建索引。

使用如下命令在子文檔的所有三個字段上創(chuàng)建索引:

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

一旦創(chuàng)建了索引,就可以使用索引來搜索任何子文檔字段:

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

記住,查詢表達式必須遵循指定索引的順序。因此上面創(chuàng)建的索引將支持如下查詢:

>db.users.find({"address.city":"Los Angeles","address.state":"California"})

另外也支持如下這樣的查詢:

>db.users.find({"address.city":"LosAngeles","address.state":"California","address.pincode":"123"})

上一篇:創(chuàng)建集合下一篇:PHP