对多个字段进行Mongoose过滤(搜索)

时间:2017-08-28 16:19:29

标签: node.js mongodb search filtering

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

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
  4. 等等。

    提前谢谢你!

1 个答案:

答案 0 :(得分:6)

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

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);