MongoDB 涵蓋查詢

在本章中,我們將學(xué)習(xí)涵蓋的查詢。

什么是涵蓋查詢?

根據(jù)官方的MongoDB文檔,涵蓋的查詢是這樣的查詢,其中-

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

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

由于查詢中存在的所有字段都是索引的一部分,因此MongoDB會(huì)匹配查詢條件,并使用相同的索引返回結(jié)果,而無需實(shí)際查看文檔內(nèi)部。由于索引存在于RAM中,因此與通過掃描文檔獲取數(shù)據(jù)相比,從索引獲取數(shù)據(jù)要快得多。

使用覆蓋查詢

要測(cè)試涵蓋的查詢,請(qǐng)看sers集合中的以下文檔-

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

我們將首先使用以下查詢?cè)趃ender和user_name字段上為users集合創(chuàng)建一個(gè)復(fù)合索引–

>db.users.createIndex({gender:1,user_name:1})
{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

現(xiàn)在,該索引將涵蓋以下查詢-

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

也就是說,對(duì)于上面的查詢,MongoDB 不會(huì)查看數(shù)據(jù)庫(kù)文檔。相反,它將從索引數(shù)據(jù)中獲取所需的數(shù)據(jù),這是非??斓?。

由于索引不包含_id字段,因此我們已將其從查詢的結(jié)果集中明確排除,因?yàn)镸ongoDB默認(rèn)情況下會(huì)在每個(gè)查詢中返回_id字段。所以下面的查詢不會(huì)包含在上面創(chuàng)建的索引中–

>db.users.find({gender:"M"},{user_name:1})
{ "_id" : ObjectId("53402597d852426020000003"), "user_name" : "tombenzamin" }

最后,請(qǐng)記住,如果,索引不能覆蓋查詢

  • 任何索引字段都是數(shù)組

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清