5

我需要编写一个“A OR B OR (C AND D)”形式的 MongoDB 查询来返回一些记录。我们正在使用 Mongoid 对我们的模型进行数据访问。

我将该查询扩展为“(A OR B OR C)AND(A OR B OR D)”,并希望使用any_of像这样的Mongoid的Criteria方法: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 并把它们结合起来?

4

3 回答 3

3

(编辑:我刚刚注意到这个问题已经 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}]})
于 2013-07-15T23:13:22.007 回答
0

看起来这是 mongo 中的一个错误,但我很难弄清楚报告/跟踪 mongo 问题的位置。

> db.things.insert({x : 1, y: 2});
> db.things.insert({x : 2, y: 3});
> db.things.insert({x : 3, y: 4});
> db.things.find( { $or : [{x:1,x:2}], $or : [{y:1,y:2}] });
{ ..., "x" : 1, "y" : 2 }
{ ..., "x" : 2, "y" : 3 }
于 2010-10-05T16:13:52.800 回答
0

检查这个链接,希望它可以帮助你 -

http://mongoid.org/docs/querying/

如果可能的话,您可以结合“.any_in”和“.and”并查看。

于 2010-10-04T17:46:25.493 回答