mongodb如何对文档内数组进行过滤的方法步骤
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本文介绍了mongodb如何对文档内数组进行过滤的方法步骤,分享给大家,具体如下:mongodb文档内包含数组,需要将数组中符合条件的数据过滤出来并返回结果集,可以用两种方式来查询group或filt
千家信息网最后更新 2025年11月15日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安全错误
数据库的锁怎样保障安全
数据库语句 数量总和
vs软件开发的优点
软件开发需求确认书
局域网的网络安全吗
唐软网络技术信息有限公司
什么叫安全数据库
vod 服务器
大d大储存服务器超便宜
中兴软件开发岗深圳工作环境
删除AIDATA数据库
组态王的数据库别人怎么读取
软件开发中uml的作用
upwork软件开发简历
lbm服务器x3400插内存
台州软件开发公司有哪些
网络安全安全下一个安全
熟悉数据库技术
紫金桥实时数据库60下载
软件开发公司业务员提成
锐思软件开发
南山网络安全态势周报
杭州市软件开发有限公司
服务器装安全狗网站503
云服务器显示安全证书存在问题
帕萨特B5的车载网络技术型号
如何保证网络安全的英语高一作文
电脑和服务器时间不一样怎么办
网络安全办公室设在什么部门
怎样成为安卓软件开发工程师
360天擎网络安全防护