•   MongoDB教程
  • MongoDB快速入门
  • MongoDB历史
  • MongoDB特点
  • MongoDB数据库的优点
  • MongoDB安装配置(Windows)
  • MongoDB安装配置(Ubuntu)
  • MongoDB安装配置(RedHat/CentOS)
  • MongoDB数据建模
  • MongoDB创建数据库
  • MongoDB删除数据库
  • MongoDB创建集合
  • MongoDB删除集合
  • MongoDB数据类型
  • MongoDB插入文档
  • MongoDB查询文档
  • MongoDB更新文档
  • MongoDB删除文档
  • MongoDB投影(选择字段)
  • MongoDB限制记录数
  • MongoDB排序记录
  • MongoDB索引
  • MongoDB聚合
  • MongoDB复制
  • MongoDB分片
  • MongoDB备份与恢复
  • MongoDB部署
  • Java连接MongoDB操作
  • Python连接MongoDB操作
  • PHP连接MongoDB操作
  • Ruby连接MongoDB操作
  • 高级部分
  • MongoDB关联关系
  • MongoDB数据库引用
  • MongoDB覆盖查询
  • MongoDB分析查询
  • MongoDB原子操作
  • MongoDB高级索引
  • MongoDB索引限制
  • MongoDB ObjectId
  • MongoDB Map Reduce
  • MongoDB文本搜索
  • MongoDB正则表达式
  • MongoDB GridFS
  • MongoDB固定循环集合
  • MongoDB自动递增序列
  • 用户及安全
  • MongoDB安全检查表
  • MongoDB认证
  • MongoDB用户
  • MongoDB添加用户
  • MongoDB启用身份验证
  • MongoDB管理用户和角色
  • MongoDB更改用户密码和自定义数据

MongoDB高级索引

在这一章节中,我们来学习高级索引,假设users集合的以下文档 -

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

上述文档包含地址子文档和标签数组。

索引数组字段

假设要根据用户的标签搜索用户文档。为此,我们将在集合中的tags数组上创建一个索引。

在数组上创建一个索引依次为每个字段创建单独的索引条目。所以在这个例子中,当在tags数组上创建一个索引时,将为其值music,cricket和blogs创建单独的索引。

要在tags数组上创建索引,请使用以下代码 -

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

创建索引后,可以搜索这个集合的标签字段 -

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

要验证是否使用正确的索引,请使用以下说明命令 -

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

上面的命令生成:“cursor”:“BtreeCursor tags_1”,它确认使用了正确的索引。

索引子文档字段

假设要搜索基于city,province和pincode字段的文档。 由于所有这些字段都是地址子文档字段的一部分,因此将在子文档的所有字段上创建一个索引。

要在子文档的所有三个字段上创建索引,请使用以下代码 -

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

上一篇:MongoDB原子操作下一篇:MongoDB索引限制