假设我们在一个集合中有以下文档:
{
"_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)
。查询将始终仅在字段a
和b
上,但可能会有一万个a
和b
对(组合)。
有没有办法使用$in
运算符进行此类查询?
如果没有,那么最好的方法是什么?
答案 0 :(得分:1)
您尝试构建的基础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
的特殊情况快捷方式。