0

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

{
    "_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,但可能会有一万个可能的ab对(组合)。

有没有办法使用运算符进行这种查询$in

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

4

1 回答 1

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 => ... }

某些s$in的特殊情况快捷方式也是如此。$or

于 2015-07-18T20:45:06.000 回答