一、
想要实现输入框输入内容后,后端通过正则匹配查询出匹配的省市信息
1.输入’深‘,想要获取含有‘深’字的深圳市的数据,mongo数据库中结构如下
最开始 city.find({"city_list.city_name":{'$regex':"深"}}),这样筛选得到的结果是含有深圳市的广东省所有数据集
要想只得到深圳一条记录,需要再得到的结果再做嵌套筛选
city.find({"city_list.city_name":{'$regex':"深"}},{"city_list":{$elemMatch:{"city_name":{'$regex':"深"}}}})
最后,得到只含有深圳信息的数据
但是,$elemMatch 只会返回符合条件的第一条记录
二、在输入'州‘时发现,一个数据集中含有多组符合条件的数据筛选不出来,$elemMatch不适用
筛选同一集合中的多条记录,使用$aggregate
var cityStr='州';
city.aggregate(
[{"$unwind":"$city_list"},
{"$match":{"city_list.city_name":{'$regex':cityStr}}},
{
"$group":{
"_id":"$_id",
"results":{
"$push":{"_cid":"$city_list._cid","city_name":"$city_list.city_name"}
}
}
}
]).exec((err,doc)=>{
...
})
$unwind:将city_list拆分成一条一条的记录
$match: 筛选记录的条件,筛选含有'州’的记录
$group:将符合条件的记录 组成一个集合