我的文档结构是这样的
{
_id: "id1",
field1: "val1",
field2: "val2",
outcome: "ABC"
}
我在结果字段上创建了索引。我必须找到仅包含{outcome:"ABC"}
或{outcome:"XYZ"}
的所有文档。如果我使用$or
或$in
,查询执行时间没有重大差异。例如
db.coll.find({$or:[{outcome:"ABC"},{outcome:"XYZ"}]});
db.coll.find({outcome:{$in:["ABC","XYZ"]}});
在这种情况下,我应该使用$or
或$in
哪个运算符?为什么?任何帮助,将不胜感激。
答案 0 :(得分:2)
MongoDB docs
使用
$or
与<expressions>
对同一字段的值进行相等性检查时,请使用$in
运算符代替$or
运算符。例如,要选择库存集合中数量字段值等于
20
或50
的所有凭证,请使用$in
运算符:db.inventory.find ( { quantity: { $in: [20, 50] } } )
因此,在您的情况下,最好使用
db.coll.find({outcome:{$in:["ABC","XYZ"]}});