【问题标题】:Mongoose filtering (search) on multiple fields [duplicate]多个字段上的猫鼬过滤(搜索)[重复]
【发布时间】:2019-08-26 19:30:59
【问题描述】:

我正在尝试对多个字段进行基本过滤(搜索),并想问如何实现它:

Location.find({
          $and: [
            { name: { $regex: query.name } },
            { city: query.city },
            { type: query.type }
          ]
});

我一开始就有这个,但当然,这会过滤所有字段,$or 是不够的。

我的数据如下所示:

{ 
  "name": "Shop1",
  "type": "shop",
  "city": "City1"
},
{
  "name": "Shop2",
  "type": "shop",
  "city": "City1"
},
{
  "name": "Cafe1",
  "type": "cafe",
  "city": "City2"
}

目标将能够搜索输入名称、类型和城市。 (任何字段都可以为空)

例如:

  1. Shop1 / Shop / City1 => Shop1
  2. Shop / *blank* / City1 => Shop1, Shop2
  3. *blank* / Shop / City1 => Shop1, Shop2

等等。

提前谢谢你!

【问题讨论】:

    标签: node.js mongodb search filtering


    【解决方案1】:

    您需要通过检查是否存在哪个参数来创建查询对象

    var queryCond = {}
    if(query.name){
       queryCond.name={$regex:query.name,$options:"i"};
    }
    if(query.city){
       queryCond.city=query.city;
    }
    if(query.type){
       queryCond.type=query.type;
    }
    Location.find(queryCond);
    

    在 es6 中你可以很好地做到这一点

    let {type,city,name} = query;
    queryCond = {
     ...(type && {type}),
     ...(city && {city}),
     ...(name && {name:/regex here/}),
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 2016-07-21
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2017-10-05
      相关资源
      最近更新 更多