免费刷金币,请点击这里
TE社区 > 数据库
客服QQ:1206116161

MongoDB如何对数组中的元素进行查询详解

点烟丶燃寂寞 于 2018-04-04 20:00:24 创建话题
(33)
(0)
举报

前言

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条记录。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对TE网络的支持。

扫码关注TE官方微博 扫码关注TE官方微博
asp.net中session的原理及应用详解 对python中的xlsxwriter库简单分析 iOS Tabbar中间添加凸起可旋转按钮功能 在Linux服务器上安装Linux-Dash的教程 jQuery事件绑定用法详解 js 单引号 传递方法 详解Android Gradle插件3.0挖坑日记 linux top命令详解和使用实例及使用技巧(监控linux的系统状况) jQuery表单美化插件jqTransform使用详解 修改Tomcat默认访问根目录的方法 通过onmouseover选项卡实现img图片的变化 php笔记之:有规律大文件的读取与写入的分析 js判断请求的url是否可访问,支持跨域判断的实现方法 centos下netconfig 的安装方法 js动态往表格的td中添加图片并注册事件 jQuery简介_动力节点Java学院整理 JavaScript观察者模式(publish_subscribe)原理与实现方法 纯 Css 绘制扇形的方法示例 AngularJS 表达式详解及实例代码 javascript this详细介绍 jQuery CSS()方法改变现有的CSS样式表 判断dll文件是否已经注册的ASP函数代码 php通过获取头信息判断图片类型的方法 Jquery Autocomplete 结合asp.net使用要点 SQL SEVER数据库重建索引的方法 php实现图片添加水印功能 jquery自定义类似$.ajax()的方法实现代码 jQuery动态修改字体大小的方法【测试可用】 php代码收集表单内容并写入文件的代码 php导入模块文件分享 PHP的Socket网络编程入门指引 在线编辑器的实现原理(兼容IE和FireFox) Linux系统中tr命令删除和替换文本字符的基本用法 使用命令对象代替switch语句的写法示例 html5+javascript实现简单上传的注意细节 mysql5.7.22 下载过程图解 javascript + jquery实现定时修改文章标题 AngularJs学习第五篇从Controller控制器谈谈$scope作用域 在vue项目中引入highcharts图表的方法(详解) JavaScript实现网页图片等比例缩放实现代码及调用方式 IOS实现聊天界面底部菜单栏效果 Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例 node.js 中国天气预报 简单实现 javascript获取url上某个参数的方法 Python实现爬取需要登录的网站完整示例 Lua获取文件长度和判断文件是否存在函数分享 Asp.net生成Excel文件并下载(更新:解决使用迅雷下载页面而不是文件的问题) 配置iptables,把80端口转到8080的简单方法 完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题 ASP.NET 使用application与session对象写的简单聊天室程序 GridView分页的实现(通用分页模板) mysql 转换NULL数据方法(必看) Python中的测试模块unittest和doctest的使用教程 jsp 自动编译机制详细介绍 mysql使用GROUP BY分组实现取前N条记录的方法 JavaScript淡入淡出渐变简单实例 asp.net 无重复随机数代码 Mac怎么更改finder图标?Mac改finder字体大小方法 彻底弄懂CSS盒子模式系列教程集合 JavaScript读取中文cookie时的乱码问题的解决方法 CentOS系统安装Redis及Redis的PHP扩展详解 js异步加载的三种解决方案 AngularJS入门知识之MVW类框架的编程思想探讨 Linux密码安全防护操作详解 浅谈Angular中ngModel的$render ora-00119和ora-00132问题的解决方法 python数据结构之链表的实例讲解 jquery简单的弹出层浮动层代码 JS提交form表单实例分析 jQuery的内容过滤选择器学习教程 取numpy数组的某几行某几列方法 Linux上查看用户创建日期的几种方法总结 SQLite速度评测代码 jquery命令汇总,方便使用jquery的朋友 js console.log打印对像与数组用法详解 css3 transform 3d 使用css3创建动态3d立方体(html5实践) 浅谈Angular文字折叠展开组件的原理分析 js简单正则验证汉字英文及下划线的方法 php实现支付宝当面付(扫码支付)功能 JavaScript中的style.cssText使用教程 跟我学习javascript的垃圾回收机制与内存管理 JS交换变量的方法 python通过索引遍历列表的方法 php中使用__autoload()自动加载未定义类的实现代码 Android FaceDetector实现人脸检测功能 jQuery select自动选中功能实现方法分析 javascript 实现文本使用省略号替代(超出固定高度的情况) JS中精巧的自动柯里化实现方法 Jquery 获取指定标签的对象及属性的设置与移除 简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器 一个有意思的鼠标点击文字特效jquery代码 python实现的简单FTP上传下载文件实例 基于python实现简单日历 Docker基础知识之Linux namespace图文详解 js正则表达式之match函数讲解 在Python中使用第三方模块的教程 jQuery实现列表的全选功能 JavaScript 匿名函数和闭包介绍 SQL 查询和删除重复字段数据的方法 AngularJS实现路由实例 SQL Server 使用触发器(trigger)发送电子邮件步骤详解 基于Python如何使用AIML搭建聊天机器人 Mac怎么传输文件到安卓手机 苹果Mac传音乐到安卓手机图文教程 linux rm 命令(删除文件和目录) 使用详解 html5指南-4.使用Geolocation实现定位功能 CSS使用BFC规则布局引发外层div包裹内层div的处理方法 直接双击启动tomcat中的startup.bat闪退原因及解决方法 AngularJS2中一种button切换效果的实现方法(二) jsp隐藏关键敏感字段信息只显示前后字段的示例 WebView设置WebViewClient的方法 iOS实现自定义表单实例代码 jQuery ready方法实现原理详解 vue.js学习笔记 如何加载本地json文件 Python3中正则模块re.compile、re.match及re.search函数用法详解 Windows Powershell对象转换成文本 js 简易版滚动条实例(适用于移动端H5开发) CentOS禁用与开启触摸板的方法 JS的递增_递减运算符和带操作的赋值运算符的等价式 Css3制作变形与动画效果 分享5个好用的javascript文件上传插件 jQuery入门之层次选择器实例简析 PHP根据传来的16进制颜色代码自动改变背景颜色 ASP.NET网页显示LED字体的方法 Lesson01_07 图像标签 JavaScript实现简单的四则运算计算器完整实例 在vue中使用jointjs的方法 编写PHP程序检查字符串中的中文字符个数的实例分享 Ubuntu Server下建立VPN服务器的方法 jsp页面中插入css样式的三种方法总结 JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一) JavaScript中数据结构与算法(一):栈 Linux系统中强大的文本操作命令tr的使用讲解 ThinkPHP调用common_common.php函数提示错误function undefined的解决方法 PHP开发微信支付的代码分享 JavaScript操作 url 中 search 部分方法函数 js中遍历Map对象的方法 JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果) Linux下的mongodb服务监视脚本(启动服务) javascript实现html页面之间参数传递的四种方法实例分析 asp 存贮过程 (SQL版asp调用存储过程) Lesson02_02 帧标签 一道关于JavaScript变量作用域的面试题 JavaScript比较两个数组的内容是否相同(推荐) Linux常用网络工具之路由扫描工具mtr使用介绍 代码实现打印功能(asp.net+javascript) IE Firefox 使用自定义标签的区别 Python的设计模式编程入门指南 详解 Mysql查询结果顺序按 in() 中ID 的顺序排列 CFC4N小试php正则表达式 jQuery中removeClass()方法用法实例 javascript模拟php函数in_array 对象题目的一个坑 理解Javascript对象 在一个网站下再以虚拟目录的方式挂多个网站的方法 JavaScript中一个奇葩的IE浏览器判断方法 jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等) IIS6.0下Wordpress 去掉 index.php 和 category 的方法小结 使用ajax实现无刷新改变页面内容和地址栏URL FCKeditor 2.0 简化和使用 原生JS封装animate运动框架的实例 bpython 功能强大的Python shell sqlserver清除完全重复的数据只保留重复数据中的第一条 前端构建工具之gulp的配置与搭建详解 jQuery实现定位滚动条位置 windows下python模拟鼠标点击和键盘输示例 深入浅析Bootstrap列表组组件 nodejs 中模拟实现 emmiter 自定义事件 JavaScript字符串检索字符的方法 使用AngularJS对表单提交内容进行验证的操作方法 js获取页面及个元素高度、宽度的代码 mac系统中safari怎么添加书签? 把常用网页添加到收藏夹的效果 js手机号批量滚动抽奖实现代码 深入理解javascript构造函数和原型对象 Ubuntu如何轻松编译openJDK详解 jQuery搜索同辈元素方法 Python之文字转图片方法 Javascript 中文字符串处理额外注意事项 ES5学习教程之Array对象 SQL中位数函数实例 苹果电脑Mac系统中运行软件显示Enable access for assitive devices解决方法 CentOS与Ubuntu哪个更适合做服务器系统 MySQL高可用解决方案MMM(mysql多主复制管理器) Python进阶_关于命名空间与作用域(详解) JavaScript数组去重由慢到快由繁到简(优化篇) PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】 spring集成okhttp3的步骤详解 JavaScript获取页面上某个元素的代码 jQuery 监控键盘一段时间没输入 JS仿flash上传头像效果实现代码 tensorflow 加载部分变量的实例讲解 jquery ajax 如何向jsp提交表单数据 Ubuntu 15.04系统安装后要做的15件事 2014年50个程序员最适用的免费JQuery插件 基于PHP+Ajax实现表单验证的详解 asp.net简单生成XML文件的方法 ES6所改良的javascript“缺陷”问题 Asp.Net、asp实现的搜索引擎网址收录检查程序 修改Mysql root密码的方法 JavaScript中的Math.SQRT1_2属性使用简介 javascript 面向对象编程基础:继承 判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)
一个关于JSP+servlet+Mysql的企业电子商城项目 路由器交换机报价网站模板.zip 美国简约风格帝国cms模板.zip 冲浪服饰销售网站模板.zip 套房装修设计网页模板.zip 情人节快乐PSD素材下载.zip jQuery+CSS3文字排版效果.zip eclipse 黑色主题插件 仿51job弹出层城市选择代码.zip jquery+css3滑动头像.zip 微信小程序源码-简单小商城模板 铜师傅官网ecshop模板.zip jQuery多个tab切换选项卡代码.zip jQuery动态加载图片相册.zip Android 超低耦合框架 全自动注入 自动分发 全智能框架 国外旅行公司网页模板.zip 全屏banner轮播切换CSS3动画.zip html5+css3学习模板 jQuery+css3圆形倒数秒计时器代码.zip jQuery+CSS3图片翻转切换代码.zip 橙色商业CSS网页模板.zip 黑色炫酷wordpress单页模板.zip spring mvc和bootstrap3实现分页+导出功能的客户关系管理系统项目 wordpress响应式布局主题.zip CSS3星际里面的动画特效下载.zip 仿手机酷6网微官网手机wap视频网站模板.zip HTML5 SVG圆盘时钟动画.zip jQuery液态式环形按钮菜单特效.zip 微信小程序 - 图书管理系统.zip HTML5全屏星空背景动画特效.zip jQuery浮动标签插件floatlabels.zip jquery悬停栅格效果.zip EasyZoom图片缩放jQuery插件.zip 手机助手源码 jQuery姓名电话随机抽奖代码.zip 腾讯新闻多图jQuery相册代码.zip 3D立体手机触屏图片切换代码.zip jQuery图片缩放插件jQThumb.zip js键盘控制6键弹钢琴特效.zip 纯CSS3实现紫色登录表单.zip jquery鼠标悬停导航下划线滑出效果.zip MySQL驱动 jar 包 jQuery纵向柱状体样式投票代码.zip jquery仿杂志翻页切换效果.zip jQuery滑动加载进度条代码.zip 实验室设备管理系统Java版 CSS3文字阴影实现乳白文字效果.zip 航空票务管理系统 spring+strut+hibernate 微信小程序源码-集思笑话,含Vue.js后端,点赞 古代博客主题CSS网页模板.zip jQuery手机侧边栏展开收缩菜单代码.zip jQ大荧幕文字效果.zip CSS3文本框动画输入标签效果.zip jQuery覆盖滚动效果幻灯片插件.zip Discuz! x2导航风格模板.zip 响应式物流企业网站模版 快递物流货物服务类企业织梦模板(自适应手机版).zip css3实现网页电子时钟代码.zip 微信小程序源码-电话黄页 jQuery碎纸切换效果幻灯片.zip html5+css3仿Twitter注册页.zip CSS3实现ios7计算器.zip jquery多功能小巧对话框.zip Discuz! x2.5质感布艺风格模板.zip 微信小程序源码-音乐影音之家 xml文件和java实体类(bean)相互转化 源码献上,导入(My)eclipse,可直接运行看效果。 jQuery大容器左侧Tabs选项卡.zip jQuery CSS3动画过渡效果特效.zip jQuery自由拖拽排序插件下载.zip jQuery Banner图片旋转切换代码.zip 【PHP源码】Open Blog 1.2.1_openblog_1.2.1.zip QQ音乐js焦点图.zip iFocus焦点图片轮换JS版.zip 纯CSS3鼠标滑过动画按钮特效.zip jquery带图标横向拉开菜单.zip 【PHP源码】PHProxy v0.5 b2_poxy-0.5b2.zip 金色稻田HTML5农业模板.zip 高仿大众点评第二版 鞋服在线商城网站模板.zip 【PHP源码】MolyX BOARD 2.5.0 多语言标准版_molyx_board_2.5.0.zip jQuery 3D弹出窗口变换特效.zip 侧边索引按钮js幻灯片代码.zip jQuery涟漪幻灯片切换.zip 仿QQ侧滑菜单 QQ音乐js焦点图.zip JAVA局域网监听软件的设计与开发(源代码+论文) 麦田收割种植HTML5模板.zip 滨海城市旅游景区网站模板.zip 微信小程序Demo:仿饿了吗 【ASP.NET源码】ASP.NET MVC 1.0 BBS 简易Demo教学版_mvcbbs.zip 苹果显示屏图片放大效果.zip 原生JS左右滚动焦点图.zip 3D立体手机触屏图片切换代码.zip 旅行客车公司网站模板.zip 网上商城后台管理系统(Oracle+Java web) 设计类手机版html5网站模板.zip 最好的bootstrap模板-metronic V3.7最新版本5 jQuery移动端图片触摸放大代码.zip js抖动美女相册图片放大展示.zip 微信小程序源码-借款申请 jQuery点击图片上下滑动切换.zip jQuery左侧圆形左右按钮图片切换.zip struts2.3.8+spring3.2.0+hibernate4.1.9真正零配置附一个Demo绝对纯净版 服装批发市场HTML网站模板.zip PHPWind论坛 哈猫风格.zip CSS3实现兴趣图谱效果.zip 仿Pinterest网格瀑布流代码.zip 纯CSS3实现3D立方体旋转动画.zip jQuery左右摇晃焦点图切换.zip jQuery网站logo动态展示.zip 商务咨询公司bootstrap模板.zip SpringMVC+Hibernate+Easyui权限管理系统 jquery可定制高度画廊.zip 【ASP.NET源码】冬冬全动态企业网站 2.0_dongdong20.zip jQuery爆炸效果炫酷轮播焦点图.zip 网站服务器运营托管html网站模板.zip jQuery手机通讯录选中删除代码.zip 仿北京三甲医院移动版手机wap医院网站模板.zip 【PHP源码】PHPSINFO v1.0_phpsinfo.zip jQuery实用幻灯片特效代码.zip 蓝色大气的公司后台登录页面.zip 基于jQuery的时钟特效.zip 【PHP源码】NEATPIC (PHP目录直读英文版)_neatpic.zip 影视制作wordpress主题.zip 手机app订餐 iso7风格之页面向右滑动切换餐饮美食模板 微信小程序源码-零食商城 CSS3深色滑动单页模板下载.zip HTML5 Canvas花朵生成器.zip 【ASP.NET源码】都市网络新闻中心系统源码_citynews.zip xbox游戏体验网站模板.zip 彩妆美容美甲公司模板.zip CSS3实现蝙蝠侠变身动画.zip 麦田收割种植HTML5模板.zip 电锯生产厂家公司网站模板.zip jQuery自适应大小焦点图.zip SSH2框架整合 增删改查以及分页 适合初学者 css实现Bubble提示框效果.zip ExtAspNet登陆界面 校园图书馆网站模板下载.zip 新版化龙巷首页phpwind模板.zip Python网页商品价格监控程序 星系博客CSS网页模板.zip 深灰色教育行业网站模板.zip html5文字粒子动画效果代码.zip jQuery简单实用的五角星评分特效.zip 【手机app大图标版 iso7风格之页面向右滑动切换大图标版模板】触屏版html5响应式手机app网站模板下载.zip JS滚动事件插件Headroom.zip jquery图片播放器.zip 太阳能电池板厂家网站模板.zip 优雅大气帝国cms博客模板.zip HTML5企业数据统计后台管理模板 仿人民网新闻手机wap网站模板.zip 帝国cms豆瓣绿色清爽模板.zip jQuery超酷打字机效果.zip 界面美化Javascript类库.zip 【ASP.NET源码】基于网络的投稿系统 v1.0_tougao.zip 网络外包公司网站模板.zip jQuery鼠标经过变化过渡效果.zip 户外驴友探险html5模板.zip jquery图片拖拽排序.zip jquery幻灯片tabs选项卡.zip 旅行旅游CSS网页模板.zip 微信小程序 - 图表.zip dubbo 的demo,可以分布式测试系统 大气境外游景区景点网页模板.zip 微信小程序 - 超级染色体小游戏.zip HTML5跟随鼠标画图效果代码.zip css3实现幻灯片切换.zip 【ASP.NET源码】小计天空企业管理 Asp.Net(C#)版_shownet.zip 【PHP源码】我要查生日密码查询系统_birth.zip springboot+redis+mybatis事务和引擎模板 【ASP.NET源码】网站RSS订阅功能插件RSSMaker ASP.net版_rssmaker_asp.net.zip 【ASP.NET源码】Silverlight多文件(大文件)上传项目源码_slmultifileuploader.zip CSS3华丽的Tab菜单.zip Bootstrap滑动选项卡切换代码.zip UI Design网站设计公司模板.zip vivo官网左右全屏动画焦点图.zip 项目介绍网站整站模板.zip 微信小程序源码-极客社区+后台 图片分组切换jQuery缩略图.zip 图片设计CSS网页模板.zip CSS3 SVG气泡加载动画特效.zip 个性的js文字洗牌式切换特效.zip jquery图片放大插件Lightbox2.6.zip 摄影画廊CSS网页模板.zip 【PHP源码】PHP人物图片在线评选投票系统 v1.0.1_tpphp.zip mui图片裁切(拍照、从相册)上传源码实现,含Java后台,兼容安卓和ios 手工雕刻培训网站模板.zip 微信小程序源码-化妆品商城 CSS3图片全屏显示.zip 纯CSS3实现3D浮动按钮.zip 适合做图片类网站的jQuery特效.zip 多款jQuery分页插件特效.zip 微信小程序 - 云笔记.zip 宽屏扁平化结婚恋爱整站模板.zip phpwind9.0合肥论坛.zip 橙色服务公司html5模板.zip 蓝色营销型网站模板.zip JQuery EasyUI+SSH搭建的小程序 用maven搭建Spring+SpringMVC+MyBatis+Bootstrap+mysql实现后台管理 支持自定义弹出窗口插件PopModal.zip
举报X