2016-03-01 47 views
2

我的文檔結構是這樣

{ 
    _id: "id1", 
    field1: "val1", 
    field2: "val2", 
    outcome: "ABC" 
} 

我已經創建的結果字段索引。我必須僅查找所有帶有{outcome:"ABC"}{outcome:"XYZ"}的文檔。如果我使用$or$in,查詢執行時間沒有太大差異。 e.g

db.coll.find({$or:[{outcome:"ABC"},{outcome:"XYZ"}]}); 
db.coll.find({outcome:{$in:["ABC","XYZ"]}}); 

我應該在這種情況下使用哪個運營商$or$in?爲什麼?任何幫助,將不勝感激。

+1

嘗試使用'db.coll.find({//您的查詢})。explain(「executionStats」)'並查看其差異。 –

回答

2

MongoDB的docs

當使用$or<expressions>是對於相同的字段的值相等檢查,使用操作者$in代替$or運算符。

例如,選擇清單集合數量字段的值等於或者2050,使用$in運營中的所有文檔:

db.inventory.find ({ quantity: { $in: [20, 50] } }) 

所以你的情況最好是使用

db.coll.find({outcome:{$in:["ABC","XYZ"]}});