2011-10-22 45 views
2

比方說,我有類似這樣的很多文件...如何在MongoDB中索引「或」?

{ 
    name: 'alex', 
    city: 'LA', 
    about: 'designer', 
} 

db.people.find({'name':'alex', $or: [{'city':'LA'}, {'about':'designer'}] }); 

如果我想查詢的是,我怎麼索引呢?每次有「或」時,我是否需要2個索引?

回答

3

索引中的第一個詞始終是official Mongo index documentation

要更直接地回答此問題,如果您希望查詢不僅僅使用「名稱」進行索引,還需要所有三個字段的索引。雖然這可以通過三個不同的指標來完成,一對複合索引的可能提供更好的結果:

db.people.ensureIndex({name:1, city:1}); 
db.people.ensureIndex({name:1, about:1}); 

之前解決任何選項,但是,我會利用蒙戈的explain method確定各指標是什麼斬獲通過無索引查詢(在數據集上測試與預期的生產數據集相同的大小)。我會特別注意每個索引組合的「nscanned」和「nscannedObjects」屬性,以及使用「indexOnly」和「isMultiKey」驗證是否正在使用所需的索引。

作爲最後一點,過度索引也會導致性能問題 - 如果他們不這樣做,我們將不必確保索引。請確保您需要的索引讀取速度增加超過這些索引的寫入速度損失。