mongodb:$elemMatch $aggregate实现只获取嵌套数组对应条件的记录

一、

想要实现输入框输入内容后,后端通过正则匹配查询出匹配的省市信息

1.输入’深‘,想要获取含有‘深’字的深圳市的数据,mongo数据库中结构如下

mongodb:$elemMatch $aggregate实现只获取嵌套数组对应条件的记录_第1张图片

最开始 city.find({"city_list.city_name":{'$regex':"深"}}),这样筛选得到的结果是含有深圳市的广东省所有数据集

mongodb:$elemMatch $aggregate实现只获取嵌套数组对应条件的记录_第2张图片

要想只得到深圳一条记录,需要再得到的结果再做嵌套筛选

city.find({"city_list.city_name":{'$regex':"深"}},{"city_list":{$elemMatch:{"city_name":{'$regex':"深"}}}}

最后,得到只含有深圳信息的数据

mongodb:$elemMatch $aggregate实现只获取嵌套数组对应条件的记录_第3张图片

但是,$elemMatch 只会返回符合条件的第一条记录

二、在输入'州‘时发现,一个数据集中含有多组符合条件的数据筛选不出来,$elemMatch不适用

mongodb:$elemMatch $aggregate实现只获取嵌套数组对应条件的记录_第4张图片

筛选同一集合中的多条记录,使用$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:将符合条件的记录 组成一个集合

你可能感兴趣的:(mongo)