本系列文章翻譯自《50 Tips and Tricks for MongoDB Developers》,暫時沒有找到中文版,反正自己最近也在深入學(xué)習(xí)mongodb,所以正好拿來翻譯一下。一方面加強自己學(xué)習(xí)的效果,另一方面讓大 家也一起來體驗一下需要我們這些mongodb使用者需要注意的地方。
目前創(chuàng)新互聯(lián)已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設(shè)計、洞頭網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
首先聲明自己的英文水平不是太高,加之有些英文翻譯成中文也找不到合適的詞來表達,所以在文章中可能會出現(xiàn)英文原詞,或者說有些地方的翻譯會有些生 硬,也就是說會出現(xiàn)直譯的地方。翻譯該書的主要目的是為大家學(xué)習(xí)探討用的,如果有翻譯不精準(zhǔn)的地方,或者說有更加精準(zhǔn)的翻譯,還請大家指出,我會及時的更 正的,在此先謝過各位了。
Tip#24.Create indexes that cover your queries
創(chuàng)建的索引最好能覆蓋你的查詢
如果你這需要返回特定的字段,在索引中包含這些字段,mongodb將只是做索引的查詢,不會隨著指針訪問文檔,只需要返回索引保存的數(shù)據(jù)就可以了。因此,假設(shè)你在下面的字段建立索引。
- > db.foo.ensureIndex({"x":1,"y":1,"z":1})
然后,如果你只是針對這些字段進行查詢,并且只返回這些字段的值,mongodb就沒有理由加載整個文檔。
- > db.foo.find({"x":criteria,"y":criteria},{"x":1,"y":1,"z":1,"_id":0})
上面的查詢只會觸及索引的值,不會觸及集合。
請注意,我們在返回的字段中包含"_id":0。_id字段默認總是被返回的,但是它不是mongodb索引的一部分。從查詢結(jié)果中去除這個字段,意味著查詢只需要返回索引的值就可以了。
如果查詢只返回比較少的字段,考慮可以將這些字段加入索引,方便你進行覆蓋索引的查詢,即使你不查詢這些字段也沒有關(guān)系。例如,上面的查詢條件中沒有z字段,如果返回結(jié)果中包含z字段,也可以把z字段加入索引。