W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
官方的 MongoDB 的文檔中說明,覆蓋查詢是以下的查詢:
由于所有出現(xiàn)在查詢中的字段是索引的一部分, MongoDB 無需在整個數(shù)據(jù)文檔中檢索匹配查詢條件和返回使用相同索引的查詢結(jié)果。
因為索引存在于RAM中,從索引中獲取數(shù)據(jù)比通過掃描文檔讀取數(shù)據(jù)要快得多。
為了測試蓋索引查詢,使用以下 mycol 集合:
{ "_id" : 1, "name" : "tom", "sex" : "男", "score" : 100, "age" : 34 }
{ "_id" : 2, "name" : "jeke", "sex" : "男", "score" : 90, "age" : 24 }
{ "_id" : 3, "name" : "kite", "sex" : "女", "score" : 40, "age" : 36 }
{ "_id" : 4, "name" : "herry", "sex" : "男", "score" : 90, "age" : 56 }
{ "_id" : 5, "name" : "marry", "sex" : "女", "score" : 70, "age" : 18 }
{ "_id" : 6, "name" : "john", "sex" : "男", "score" : 100, "age" : 31 }
我們在 mycol 集合中創(chuàng)建聯(lián)合索引,字段為 sex 和 name :
db.mycol.ensureIndex({sex : 1, name : 1})
現(xiàn)在,該索引會覆蓋以下查詢:
db.mycol.find({sex: '男'},{name : 1, _id : 0})
也就是說,對于上述查詢,MongoDB 的不會去數(shù)據(jù)庫文件中查找。相反,它會從索引中提取數(shù)據(jù),這是非常快速的數(shù)據(jù)查詢。
由于我們的索引中不包括 _id 字段,_id 在查詢中會默認返回,我們可以在 MongoDB 的查詢結(jié)果集中排除它。
下面的實例沒有排除 _id,查詢就不會被覆蓋:
db.mycol.find({sex: '男'},{name : 1})
最后,如果所有索引字段是一個數(shù)組,不能使用覆蓋索引查詢。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: