我的文档结构是这样的
{
_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
哪个运算符?为什么呢?任何帮助都将不胜感激。 最佳答案
MongoDBdocs
当使用$or
和<expressions>
作为同一字段值的相等检查时,请使用$in
运算符而不是$or
运算符。
例如,要选择库存集合中数量字段值等于20
或50
的所有文档,请使用$in
运算符:
db.inventory.find ( { quantity: { $in: [20, 50] } } )
所以在你的情况下最好用
db.coll.find({outcome:{$in:["ABC","XYZ"]}});
关于mongodb - 带有$ in或$或的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35724342/