MongoDB select 个基于多个字段的文档

MongoDB select documents based on multiple fields

假设我们在集合中有以下文档:

{
    "_id" : ObjectId("55aa9d35dccf57b64d34f448"),
    "a" : 1,
    "b" : 7,
    "c" : 0
}

{
    "_id" : ObjectId("55aa9d64dccf57b64d34f449"),
    "a" : 2,
    "b" : 8,
    "c" : 1
}

{
    "_id" : ObjectId("55aa9d6bdccf57b64d34f44a"),
    "a" : 2,
    "b" : 7,
    "c" : 0
}

我想获取 (a = 1 and b = 7) or (a = 2 and b = 8) 中的所有文档。查询将始终仅针对字段 ab,但可能会有一万个可能的 ab 对(组合)。

有没有办法使用 $in 运算符进行此类查询?

如果没有,最好的方法是什么?

您尝试构建的基础 MongoDB 查询是:

$or: [
    { a: 1, b: 7 },
    { a: 2, b: 8 }
]

直接转换为:

Model.where(:$or => [
    { :a => 1, :b => 7 },
    { :a => 2, :b => 8 }
])

或者您可以使用 or 方法:

Model.or(
    { :a => 1, :b => 7 },
    { :a => 2, :b => 8 }
)

此处不需要 $in,您可以使用 $in 来查看单个字段是否等于数组的任何元素。例如,这些是等价的:

where(:$or => [ { :a => 1 }, { :a => 2 } ])
where(:a => { :$in => [ 1, 2 ] })
where(:a.in => [ 1, 2 ]) # a short form of :a => { :$in => ... }

所以 $in 是某些 $or 的特例快捷方式。