我的文档结构是这样的

{
    _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运算符。
例如,要选择库存集合中数量字段值等于2050的所有文档,请使用$in运算符:

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

所以在你的情况下最好用
db.coll.find({outcome:{$in:["ABC","XYZ"]}});

关于mongodb - 带有$ in或$或的索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35724342/

10-09 20:14