【问题标题】:MongoDB query AND/OR PrecedentMongoDB 查询 AND/OR 先例
【发布时间】:2011-05-27 12:30:33
【问题描述】:

在 MongoDB 中,如果我想表达 A AND (B OR C),我可以很容易做到:

db.demo.find( { a: 1, $or: [ {b:1}, {c:1} ] });

但如果我想要 (A AND B) OR C -- 它似乎不起作用。如果我尝试:

db.demo.find( { $or: [ {a:1,b:1}, {c:1} ] });

上面是把它当作A或B或C,这与

db.demo.find( { $or: [ {a:1}, {b:1}, {c:1} ] });

此时,我不想使用 Javascript 表达式 $where 来完成此操作(但别无选择,如果没有其他方法) - 原因是,我正在创建一个通用过滤规则,这是直接转换为 MongoDB 查询。

有什么帮助吗?

【问题讨论】:

  • 糟糕!不,问题不正确。查询正常工作。我在下面的答案中发布了详细信息。

标签: javascript mongodb


【解决方案1】:

查询确实可以正常工作。问题不正确。

这是我尝试过的方法及其工作原理的看法!

数据:

> db.demo.find() 
{ "_id" : 1, "age" : 38, "mgmt" : "no", "salary" : 100 } 
{ "_id" : 2, "age" : 45, "salary" : 200, "mgmt" : "no" } 
{ "_id" : 3, "age" : 50, "salary" : 250, "mgmt" : "no" } 
{ "_id" : 4, "age" : 51, "salary" : 75, "mgmt" : "yes" } 
{ "_id" : 5, "age" : 45, "salary" : 75, "mgmt" : "no" } 

查询得到 (Age>40 AND Salary>200) OR mgmt='yes'

> db.demo.find( { $or: [ { age: {$gt:40}, salary:{$gt:200} }, {mgmt: 'yes'} ] }) 
{ "_id" : 3, "age" : 50, "salary" : 250, "mgmt" : "no" } 
{ "_id" : 4, "age" : 51, "salary" : 75, "mgmt" : "yes" } 

查询得到 (Age>40) OR (Salary>200) OR mgmt='yes'

> db.demo.find( { $or: [ { age: {$gt:40}}, {salary:{$gt:201} }, {mgmt: 'yes'} ] }) 
{ "_id" : 2, "age" : 45, "salary" : 200, "mgmt" : "no" } 
{ "_id" : 3, "age" : 50, "salary" : 250, "mgmt" : "no" } 
{ "_id" : 4, "age" : 51, "salary" : 75, "mgmt" : "yes" } 
{ "_id" : 5, "age" : 45, "salary" : 75, "mgmt" : "no" } 

所有这些都按应有的方式工作。伟大的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多