【问题标题】:mongo query for multiple conditionmongo查询多个条件
【发布时间】:2016-02-04 21:10:20
【问题描述】:

我有数据,

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

我想根据我的多个条件获取数据:

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

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

我想要一个查询:

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

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

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

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

表示第二个条件,查询应该只搜索年龄字段。

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

我正在这样做:

$query:{$and: [{name: query.name}, {age: query.age}]}

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

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

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

    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 } : {};
    

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

    【讨论】:

      【解决方案2】:

      您可以创建一个可以根据上述两个条件进行初始化的查询对象。下面的 sn-p 演示了这一点:

      填充测试集合

      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 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-15
        • 1970-01-01
        相关资源
        最近更新 更多