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