千家信息网

怎么在MongoDB中对数组中的元素进行查询

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,怎么在MongoDB中对数组中的元素进行查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言MongoDB是文档型数据库,每个文档(d
千家信息网最后更新 2025年11月09日怎么在MongoDB中对数组中的元素进行查询

怎么在MongoDB中对数组中的元素进行查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

前言

MongoDB是文档型数据库,每个文档(doc)表示数据的一项记录。相比关系型DB的row只能使用简单的数据类型,doc能够使用复杂的数据类型:内嵌doc,数组。MongoDB的数组是一系列元素的集合,使用中括号 [] 表示数组,例如:[1,2,3]的元素是整数值,[{name:"t5"}, {name:"t7"}],[ {name:"t5", age:21}, {name:"t7", age:22} ]的元素是doc。

在MongoDB中,数组元素允许重复,元素的位置是固定的。如果两个数组相等,那么这两个数组的元素和及其位置都相同。

MongoDB中根据数组子元素进行匹配,有两种方式。

  • 使用 "[数组名].[子元素字段名]" 的方式进行匹配。

  • 使用 "[数组名]" $elemMatch { [子元素字段名] }的方式。

不同点在于所匹配的主体不同。

"[数组名].[子元素字段名]" 的方式匹配的主体为 "[数组名]", 适用于单个条件,如果是多个条件, 则变成数组子元素之间的"或"运算。

请看示例:

假设某个集合内有2条数据:

document1 如下:

{  "_id" : "123",  "name" : "人文医学",  "qList" : [  {   "qid" : 1,    "content" : "医学伦理学的公正原则",    "reorderFlag" : 1  },   {   "qid" : 2,    "content" : "制定有关人体实验的基本原则",    "reorderFlag" : 0  } ]}

document2 如下:

{  "_id" : "124",  "name" : "人文医学2",  "qList" : [  {   "qid" : 1,    "content" : "医学伦理学的公正原则",    "reorderFlag" : 0  },   {   "qid" : 2,    "content" : "制定有关人体实验的基本原则",    "reorderFlag" : 1  } ]}

找出数组中, 具有 qid=1并且reorderFlag=0的记录

查询数组内同一条记录同时满足2个条件的语句:

{ "qList": { $elemMatch: { "qid": 1, "reorderFlag": 0} } }

查询结果是:

{  "_id" : "124",  "name" : "人文医学2",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "医学伦理学的公正原则",    "reorderFlag" : NumberInt(0)  },   {   "qid" : NumberInt(2),    "content" : "制定有关人体实验的基本原则",    "reorderFlag" : NumberInt(1)  } ]}

可以看到, 其执行结果是, 对数组内的每一个子元素, 执行 $elemMatch 匹配, 可以进行多个条件的匹配。

找出数组中, qid=1 或者 reorderFlag=0的记录

数组整体能满足以下2个条件:

{ "qList.qid": 1, "qList.reorderFlag": 0}

执行的主体是 qList, 要求: 有某些子元素满足 qid=1, 也要有某些子元素满足 reorderFlag=0`。

查询结果是:

{  "_id" : "123",  "name" : "人文医学",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "医学伦理学的公正原则",    "reorderFlag" : NumberInt(1)  },   {   "qid" : NumberInt(2),    "content" : "制定有关人体实验的基本原则",    "reorderFlag" : NumberInt(0)  } ]}{  "_id" : "124",  "name" : "人文医学2",  "qList" : [  {   "qid" : NumberInt(1),    "content" : "医学伦理学的公正原则",    "reorderFlag" : NumberInt(0)  },   {   "qid" : NumberInt(2),    "content" : "制定有关人体实验的基本原则",    "reorderFlag" : NumberInt(1)  } ]}

可以看到, 其执行结果是, 对数组进行匹配, 其中需要有子元素 满足 "qList.qid": 1, 还需要有子元素 满足 "qList.qid": 1, , 适合进行单个条件的匹配。

如果是单个条件匹配, 则以下方式结果是一样的。

{ "qList.qid": 1}

或者

{ "qList": { $elemMatch: { "qid": 1} } }

查询的结果都是2条记录。

看完上述内容,你们掌握怎么在MongoDB中对数组中的元素进行查询的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数组 元素 医学 原则 条件 查询 结果 人体 人文 伦理学 医学伦理学 基本原则 数据 方式 实验 有关 主体 单个 字段 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 冲击腰带60数据库 计算机软件开发商防水 漂流幻境连不上服务器 新帆网驿网络技术有限公司 武昌好的软件开发公司 沂南软件开发初级入门教学视频 请删除表中的重复数据库 网络安全工作 部门 网络安全市场前景无限 java连接数据库驱动程序对了 航天金税盘代理服务器怎么设置 salary在数据库中怎么建表 发展要求网络安全 入行网络安全工程师可以吗 湘微教育网络安全 石油软件开发做什么的 遵化服务器 互联网科技公司可以做劳务派遣吗 河北新一代软件开发五星服务 软件工程vr软件开发什么意思 法治江西网络安全法 网络安全手抄报台词 长城服务器修改远程端口号 无法连接数据库1038 信息管理和网络技术区别 兰州秦天软件开发有限公司 国际和平精英怎么改服务器 网络安全与管理工作 atm32软件开发环境 计算机视觉和数据库有什么关系
0