MongoDB查询和/或先例

时间:2010-12-18 09:20:15

标签: javascript mongodb

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

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

但如果我想要(A和B)或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查询。

任何帮助?

1 个答案:

答案 0 :(得分: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" } 

查询获取(年龄> 40和工资> 200)或mgmt ='是'

> 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" } 

查询获取(年龄> 40)或(薪水> 200)或mgmt ='是'

> 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" } 

所有这些都应该正常工作。大!