mongo查询多个条件

时间:2016-02-04 12:13:09

标签: mongodb mongodb-query

我有数据,

Sexeye = as.data.frame(sexeyes) 
p2a<-nPlot(Freq~Sex, group='Eye', data=Sexeye, type= 'multiBarchart') p2a$chart(color=c('brown', 'black', 'yellow', 'blue')) 
p2a$addFilters("Sex", "Eye") p2a$set(dom='chart3', width=600) 
p2a

我希望根据我的多种条件获取数据:

条件1: - var data = [{name: 'n1', age: 22}, {name: 'n1', age: age: 11}, {name: 'n2', age: age: 16}, {name: 'n3', age: 22}];

条件2: - var query = {name: 'n1', age: 22};

单个查询我想要的是什么:

如果我运行条件1,那么结果应为

var query = {name = '', age: 22}

如果我运行条件2,那么结果应该是

[{name: 'n1', age: 22}].

第二个条件的含义,查询应仅搜索年龄字段。

我想在一个查询中实现所有内容。

我在做:

[{name: 'n1', age: 22}, {name: 'n3', age: 22} ].

它适用于第一个条件但不适用于第二个条件。 如何在一个查询中实现它?

2 个答案:

答案 0 :(得分:5)

对其进行编码,以便只有您感兴趣的字段才会出现在查询中:

{{1}}

现在您可以将条件传递给查询。

答案 1 :(得分:4)

您可以创建一个可以根据上述两个条件初始化的查询对象。以下代码段演示了这一点:

填充测试集合

db.test.insert([
    {name: 'n1', age: 22}, 
    {name: 'n1', age: 11}, 
    {name: 'n2', age: 16}, 
    {name: 'n3', age: 22}
])

初始化条件

var criteria = {},
    condition = [
        {"name": query.name}, 
        {"age": query.age}
    ]; 

if (query.name !== "") { criteria["$and"] = condition; }
else { criteria["$or"] = condition; }

条件1)的测试标准

var query = {"name": "n1", "age": 22 }
printjson(criteria);
db.test.find(criteria);

示例输出

{ "$and" : [ { "name" : "n1" }, { "age" : 22 } ] }

{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }

条件2)的测试标准

var query = {"name": "", "age": 22 }
printjson(criteria);
db.test.find(criteria);

示例输出

{ "$or" : [ { "name" : "" }, { "age" : 22 } ] }

{ "_id" : ObjectId("56b341802ae7a05a8444ced9"), "name" : "n1", "age" : 22 }
{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }