mongodb如何对文档内数组进行过滤的方法步骤
发表于:2024-12-02 作者:千家信息网编辑
千家信息网最后更新 2024年12月02日,本文介绍了mongodb如何对文档内数组进行过滤的方法步骤,分享给大家,具体如下:mongodb文档内包含数组,需要将数组中符合条件的数据过滤出来并返回结果集,可以用两种方式来查询group或filt
千家信息网最后更新 2024年12月02日mongodb如何对文档内数组进行过滤的方法步骤
本文介绍了mongodb如何对文档内数组进行过滤的方法步骤,分享给大家,具体如下:
mongodb文档内包含数组,需要将数组中符合条件的数据过滤出来并返回结果集,可以用两种方式来查询group或filter。
数据源:
{ "_id" : ObjectId("5bbcc0c9a74db9804e78a157"), "uid" : "1000001", "name" : "zhangsan", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "0", "city" : "上海" }, { "is_query" : "1", "city" : "深圳" } ]}{ "_id" : ObjectId("5bbcc167a74db9804e78a172"), "uid" : "1000002", "name" : "lisi", "addrs" : [ { "is_query" : "0", "city" : "北京" }, { "is_query" : "0", "city" : "上海" }, { "is_query" : "1", "city" : "深圳" } ]}
要求查询指定uid下,addrs数组中只包含is_query等于1的结果集(0的不包含)。
查询语句:
方法一:使用$unwind将addrs数组打散,获取结果集后用$match筛选符合条件的数据,最后使用$group进行聚合获取最终结果集。
db.getCollection('user').aggregate( [ { $unwind: "$addrs" }, { $match : { "uid":"1000001", "addrs.is_query": "1" } }, { $group : { "_id" : "$uid", "addrs": { $push: "$addrs" } } } ])
Result:
{ "_id" : "1000001", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ]}
方法二:使用$match过滤符合条件的根文档结果集,然后使用$project返回对应字段的同时,在addrs数组中使用$filter进行内部过滤,返回最终结果集
db.getCollection('user').aggregate( [ { $match : { "uid": "1000001" } }, { $project: { "uid": 1, "name": 1, "addrs": { $filter: { input: "$addrs", as: "item", cond: { $eq : ["$$item.is_query","1"] } } } } } ])
Result:
{ "_id" : ObjectId("5bbcc0c9a74db9804e78a157"), "uid" : "1000001", "name" : "zhangsan", "addrs" : [ { "is_query" : "1", "city" : "北京" }, { "is_query" : "1", "city" : "深圳" } ]}
相对于$group分组聚合返回结果集的方式,在当前查询要求下$filter显得更加优雅一些,也比较直接。当然如果包含统计操作,比如要求返回is_query等于1的数量,这时候$group就非常合适了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
结果
数组
北京
深圳
查询
文档
方法
数据
条件
方式
上海
步骤
合适
优雅
内容
同时
字段
就是
数据源
数量
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库通过什么创建
计算机安全包括网络安全吗
战地5服务器怎么改名
仪陇县各学校开展网络安全教育
批量删除数据库数据
地平线5服务器在哪里
戴尔服务器维修中心
服务器区安全设备部署
服务器管理如何找到CD驱动器
从数据库中读取图片显示
顺义服务器回收公司
辽宁服务器电源报价多少钱
武汉哪家培训软件开发好
数据库编程工作做什么
扬州大树网络技术有限公司
企业采用那些网络技术
信息工程要学数据库吗
电子交易网络安全风险
哪些数据库应用到了数据库技术
数据库单价查询
玩cf老断开服务器
数据库系统分析的书籍
数据库可靠安全原则
服务器日志能删除吗
河北博泉网络技术
数据库系统测试员实习生
新商网络技术宣传片
数据库版本有哪些
服务器系统集成方案价格
web服务器设置站点