Mongodb 多条件mongo查询
我有数据Mongodb 多条件mongo查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我有数据 var data = [{name: 'n1', age: 22}, {name: 'n1', age: age: 11}, {name: 'n2', age: age: 16}, {name: 'n3', age: 22}]; 我想根据我的多种条件获取数据: 条件1:-var query={name:'n1',age:22} 条件2:-var query={name='',年龄:22} 我想要一个查询: 如果运行条件1,则结果应为 [{name: 'n1', age: 22}].
var data = [{name: 'n1', age: 22}, {name: 'n1', age: age: 11}, {name: 'n2', age: age: 16}, {name: 'n3', age: 22}];
我想根据我的多种条件获取数据:
条件1:-var query={name:'n1',age:22}代码>
条件2:-var query={name='',年龄:22}
我想要一个查询:
如果运行条件1,则结果应为
[{name: 'n1', age: 22}].
如果我运行条件2,那么结果应该是
[{name: 'n1', age: 22}, {name: 'n3', age: 22} ].
对于第二个条件,查询应仅使用年龄字段进行搜索
这就是我想要在一个查询中实现的全部内容
我的做法是:
$query:{$and: [{name: query.name}, {age: query.age}]}
它适用于第一种情况,但不适用于第二种情况。
如何在一个查询中实现它?对其进行编码,以便在查询中只显示您感兴趣的字段:
let criteria = [];
if (query.name && query.name.length > 0) {
criteria.push({ name: query.name });
}
if (query.age && query.age > 0) {
criteria.push({ age: query.age });
}
criteria = criteria.length > 0 ? { $and: criteria } : {};
现在,您可以将条件传递给查询。您可以创建一个查询对象,该对象可以根据上述两个条件进行初始化。以下代码段演示了这一点:
填充测试集合
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的测试标准)
样本输出
{ "$and" : [ { "name" : "n1" }, { "age" : 22 } ] }
{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }
{ "$or" : [ { "name" : "" }, { "age" : 22 } ] }
{ "_id" : ObjectId("56b341802ae7a05a8444ced9"), "name" : "n1", "age" : 22 }
{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }
条件2的测试标准)
样本输出
{ "$and" : [ { "name" : "n1" }, { "age" : 22 } ] }
{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }
{ "$or" : [ { "name" : "" }, { "age" : 22 } ] }
{ "_id" : ObjectId("56b341802ae7a05a8444ced9"), "name" : "n1", "age" : 22 }
{ "_id" : ObjectId("56b341802ae7a05a8444cedc"), "name" : "n3", "age" : 22 }