38MongoDB高级索引


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

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

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

索引数组字段

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

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

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

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

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

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

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

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

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

索引子文档字段

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

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

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

创建索引后,就可以使用此索引来搜索任何子文档的字段了,如下所示:

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

请记住,查询表达式必须遵循指定的索引的顺序。 所以上面创建的索引将支持以下查询 –

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

它还将支持以下查询 –

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

 关注右侧公众号,随时随地查看教程 MongoDB教程目录 
转载自:https://www.yiibai.com/mongodb/mongodb_advanced_indexing.html

You may also like...