mongodb高级索引

考虑以下文档中的用户集合:

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

上述文档中包含一个 address 子文档 和 标签数组.

索引数组字段:

假设我们要搜索基于用户文档的标签。对于这一点,我们将在集合中创建一个索引的标签数组。

创建索引在数组上,依次创建它的每个字段的单独索引条目。因此,在我们的例子中,当我们在标签数组创建一个索引,单独将创建 music,cricket和blogs 其值的索引。

要创建标签数组的索引,使用下面的代码:

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

在创建索引之后,我们可以像这样在集合中搜索标签字段:

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

要验证正确的索引时,使用以下 explain 命令:

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

以上的 explain 命令将  "cursor" : "BtreeCursor tags_1" 证实了正确的索引使用。

索引子文档字段:

假设我们要根据城市,州和PIN码字段来搜索文档。由于所有这些字段都是地址子文档字段的一部分,我们将在子文档创建所有字段的索引。

关于子文档的三个字段创建索引,使用下面的代码:

>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"})
posted @ 2017-05-12 10:15  奋小斗g  阅读(165)  评论(0编辑  收藏  举报