我需要编写一个格式为“A OR B OR (C AND D)”的 MongoDB 查询来返回一些记录。我们使用 Mongoid 来访问我们的模型。
我将该查询扩展为“(A OR B OR C) AND (A OR B OR D)”,并希望像这样使用 Mongoid 的条件方法 any_of
:Model.any_of (A, B, C).any_of(A, B, D)
会完成我想要的,但在发送到数据库之前会扩展为“A OR B OR C OR A OR B OR D” .
有没有一种方法可以构建此查询,或者我是否必须构建一个查询来执行 A OR B 而另一个查询来执行 C AND D 并将它们合并?
最佳答案
(编辑:我刚刚注意到这个问题已有 3 年历史了。我不知道它为什么会出现。)
你想要这样的东西:
Model.any_of(a, b, c)
其中 a
、b
和 c
是选择器文档(请记住,它们与多个子句进行 AND 运算)。
例如,如果您的查询是:
{a: 1}
{b: 1}
{c: 1, d: 1}
然后你会使用:
Model.any_of( {a: 1}, {b: 1}, {c: 1, d: 1} )
这将生成如下查询:
models.find({$or: [{a: 1}, {b: 1}, {c: 1, d: 1}]})
关于ruby - 你如何用 Mongoid 编写 "(A OR B) AND (A OR C)"查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3857649/