开发学院

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

教程正文

MongoDB 覆盖查询

MongoDB 覆盖查询 

  在本章中,我们将了解涵盖查询。

啥子是覆盖查询?

  根据MongoDB官方文档,覆盖查询是一种查询,其中-

  •   查询中的所有字段都是索引的一部分。

  •   查询中返回的所有字段都在同一索引中。

由于查询中存在的所有字段都是索引的一部分,因此MongoDB匹配查询条件,并使用相同的索引返回结果,而无需实际查看文档内部。由于索引存在于RAM中,因此与通过扫描文档获取数据相比,从索引获取数据要快得多。

使用涵盖查询

  要测试涵盖的查询,请考虑users集合中的以下文档 

{
   "_id": ObjectId("53402597d852426020000002"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "gender": "M",
   "name": "Tom Benzamin",
   "user_name": "tombenzamin"
}

  我将首先使用以下查询为gender和user_name字段上的users集合创建复合索引:

>db.users.ensureIndex({gender:1,user_name:1})

  现在,此索引将涵盖以下查询:

>db.users.find({gender:"M"},{user_name:1,_id:0})

  也就是说,对于上面的查询,MongoDB不会查看数据库文档。相反,它将从索引数据中获取所需的数据,这是非常快速的。

由于索引不包括_ id字段,因此我们已将其明确排除在查询结果集中,因为MongoDB默认情况下在每个查询中返回_ id字段。因此,下面的查询不会包含在上面创建的索引中:

>db.users.find({gender:"M"},{user_name:1})

  最后,请记住,如果

  •   任何索引字段都是数组

  •   任何索引字段都是子文档