# 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"})
```
- NoSQL 簡介
- 什么是MongoDB ?
- window平臺安裝 MongoDB
- Linux平臺安裝MongoDB
- MongoDB 數據庫,對象,集合
- MongoDB - 連接
- PHP安裝MongoDB擴展驅動
- MongoDB 數據插入
- MongoDB使用update()函數更新數據
- MongoDB使用- remove()函數刪除數據
- MongoDB 查詢
- MongoDB條件操作符
- MongoDB條件操作符 - $type
- MongoDB Limit與Skip方法
- MongoDB 排序
- MongoDB 索引
- MongoDB 聚合
- MongoDB 復制(副本集)
- MongoDB 分片
- MongoDB 備份(mongodump)與恢復(mongorerstore)
- MongoDB 監控
- MongoDB Java
- MongoDB PHP
- MongoDB 關系
- MongoDB 數據庫引用
- MongoDB 覆蓋索引查詢
- MongoDB 查詢分析
- MongoDB 原子操作
- MongoDB 高級索引
- MongoDB 索引限制
- MongoDB ObjectId
- MongoDB Map Reduce
- MongoDB 全文檢索
- MongoDB 正則表達式
- MongoDB 管理工具: Rockmongo
- MongoDB GridFS
- MongoDB 固定集合(Capped Collections)
- MongoDB 自動增長
- 免責聲明