MongoDB基于多个字段选择文档

时间:2015-07-18 20:26:41

标签: mongoid mongodb-query mongoid4

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

{
    "_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运算符进行此类查询?

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

1 个答案:

答案 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的特殊情况快捷方式。