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

一、

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

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:将符合条件的记录 组成一个集合

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值