Mongoose:使用mongodb提前搜索查询

时间:2017-07-13 05:36:48

标签: node.js mongodb mongoose

我想进行搜索查询,其中可以有最多5个参数,但它可能有5个以下的任意数量的参数。

01.name_or_number

02.from_date

03.to_date

04.is_validated

05.is_premium

我可以进行如下查询。

var query = {$or:[
    {'name':nameOrNumber},
    {'number': nameOrNumber}
  ]};

我想进行这样的查询,该查询应该只有具有值的字段。

如果用户选择from_date和to_date以及其他3个字段为空,则查询应仅使用2个日期参数进行搜索。

我可以通过if / else进行多次查询,但我想进行单一查询,这可以做到这一点。

案例1: - 用户可以使用name_or_number

进行搜索

案例2: - 用户可以使用from_date和/或to_date进行搜索

案例3: - 用户可以使用name_or_number和date

进行搜索

案例4: - 用户可以使用is_validated和/或is_premium

进行搜索

案例5: - 用户可以搜索所有5个参数

更多案例......

这可能吗?如果是,怎么样?

由于

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。您需要为您的mongoose查询创建一个动态生成的查询对象(在此示例中称为“queryObj”)。您的服务器端脚本应该迭代从用户已选择搜索的客户端发送到服务器的数据,在过程中创建包含属性名称(例如“name”)的键值对,以搜索MongoDB集合中的和潜在的匹配/匹配(例如'大卫')。注意,我建议在数组中存储每个属性名称的潜在匹配项。最后,您只需在mongoose查询查询中放置并使用该queryObj,如下所示:

    var queryObj = {};

 // iterate through the data you sent to the server 
    for (var i = 0; i < data.length; i++) {
      if (data[i].values.length > 0) {
        queryObj[data[i].keys] = { $in: data[i].values };
      }
    }

// now place that new object into your mongoose query
    Account.find(queryObj, function (err, results) {
         if (err) { 
            throw err; 
         } else {
         // do whatever you want with your results
           results;
         }
    });