Node.js Mongoose:使用mongodb进行高级搜索查询

Node.js Mongoose:使用mongodb进行高级搜索查询,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我想进行搜索查询,其中最多可以有5个参数,但可能有5个以下的任意数量的参数 01.名称或编号 02.自年月日起 03.至今 04.U是否已验证 05.U保险费是多少 我可以提出以下问题 var query = {$or:[ {'name':nameOrNumber}, {'number': nameOrNumber} ]}; 我想进行这样的查询,该查询应该只包含有值的字段 类似于若用户选择from_date和to_date,而其他3个字段为空,那个么查询应该只使用2个日期参

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

01.名称或编号 02.自年月日起 03.至今 04.U是否已验证 05.U保险费是多少 我可以提出以下问题

var query = {$or:[
    {'name':nameOrNumber},
    {'number': nameOrNumber}
  ]};
我想进行这样的查询,该查询应该只包含有值的字段

类似于若用户选择from_date和to_date,而其他3个字段为空,那个么查询应该只使用2个日期参数进行搜索

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

案例1:- 用户可以使用名称或编号进行搜索

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

案例3:- 用户可以使用名称、编号和日期进行搜索

案例4:- 用户可以使用is\ U验证和/或is\ U premium进行搜索

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

更多案例

可能吗?如果是,如何进行


谢谢

是的,这是可能的。在本例中,您需要为mongoose查询创建一个动态生成的查询对象,称为“queryObj”。您的服务器端脚本应该遍历从用户选择搜索的客户端发送到服务器的数据,在流程中创建包含属性名称(例如搜索MongoDB集合的“名称”)和潜在匹配项(例如“David”)的键值对。注意,我建议将每个属性名称的潜在匹配项存储在一个数组中。最后,您只需在mongoose find查询中放置并使用该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;
         }
    });

所以$or基本上是一个参数列表或数组。它就像整个MongoDB查询DSL实际上只是一个普通的JavaScript对象或数组。只需操纵对象。根据需要将新项目推送到阵列上。@Neil。。。几天前我就开始学了。是否可以通过代码或参考向我展示。学习什么?JavaScript?这是一个基本的列表操作,我正试图让你们认识到这一点。这里没有什么特别的,只是简单的数据结构。@Neil,我已经按照你的建议做了。谢谢你的帮助。你当时为什么接受这里给出的答案?在响应中根本没有演示用于构造$or查询的数组操作。这就是你在这里需要的。老实说,回答的用户似乎从另一个现有答案中删除了提供的响应。你真的不应该因为人们那样做而奖励他们。我是按照尼尔的建议做的。谢谢你的努力。