在本章中,我們將學(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ù)組
任何索引字段都是子文檔