我试图在多个字段上进行基本过滤(搜索),并想询问如何实现它:
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"
}
目标是能够搜索输入名称,类型和城市。 (任何字段都可以为空)
例如:
Shop1 / Shop / City1 => Shop1
Shop / *blank* / City1 => Shop1, Shop2
*blank* / Shop / City1 => Shop1, Shop2
等等。
提前谢谢你!
答案 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);