开发学院

您的位置:首页>教程>正文

教程正文

MongoDB 高级索引

MongoDB 高级索引

  假设用户集合中有如下文档:
{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

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

索引数组字段

  假设我们要基于用户的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”,它确认使用了正确的索引。

索引子文档字段

  假设我们要基于城市、州和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"})