当前位置: 首页 > news >正文

MongoDB CRUD操作:内嵌文档查询

MongoDB内嵌文档的查询

文章目录

  • MongoDB内嵌文档的查询
    • 使用点号`.`查询内嵌文档
      • 嵌套字段的相等匹配
      • 使用查询操作符进行匹配
      • 指定AND条件
    • 嵌套文档的匹配
    • 使用 MongoDB Atlas 查询内嵌文档
      • 导航至集合
      • 指定查询过滤文档
      • 点击应用

可以使用下面几种方法查询MongoDB中的嵌入文档:

  • 编程语言的驱动程序,比如:Java、Python灯。
  • MongoDB Atlas UI。
  • MongoDB Compass。
  • 其他第三方工具。

下面的示例使用mongosh的db.collection.find()方法对内嵌/嵌套文档进行查询,如果使用其他编程语言或驱动,写法会有不同。

首先,使用下面的语句创建inventory数据集:

db.inventory.insertMany( [{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

使用点号.查询内嵌文档

要对嵌入/嵌套文档中的字段指定查询条件,可使用点符号(“field.nestedField”)。使用点表示法查询时,字段和嵌套字段必须在引号内,

嵌套字段的相等匹配

db.inventory.find( { "size.uom": "in" } )

使用查询操作符进行匹配

{ <field1>: { <operator1>: <value1> }, ... }

下面的查询对嵌入在大小字段中的字段h 使用小于运算符$lt

db.inventory.find( { "size.h": { $lt: 15 } } )

指定AND条件

下面的查询选择嵌套字段h小于15、嵌套字段uom等于"in"、状态字段等于"D"的所有文档:

db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )

嵌套文档的匹配

可使用查询过滤器文档{ <field>: <value> }在嵌套文档的字段上指定相等条件,其中<value>是要匹配的文档。
例如,下面的查询选择字段size等于文档{ h: 14, w: 21, uom: "cm" }的所有文档:

db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )

MongoDB不建议对内嵌文档进行相等匹配,因为需要指定的<value>文档的精确匹配,包括字段顺序。
例如,以下查询与inventory集合中的任何文档均不匹配:

db.inventory.find(  { size: { w: 21, h: 14, uom: "cm" } }  )

当与不使用有序数据结构表达查询的驱动程序一起使用时,对内嵌文档使用相等匹配的查询结果是未定义的。

使用 MongoDB Atlas 查询内嵌文档

查询MongoDB Atlas中的文档数组,可按照以下步骤操作:

导航至集合

  1. 在 MongoDB Atlas UI 中,单击侧栏中的数据库。
  2. 对于包含样本数据的数据库部署,单击浏览集合。
  3. 在左侧导航窗格中,选择sample_training数据库。
  4. 选择grades集合。

指定查询过滤文档

为Filter字段指定查询过滤文档。查询过滤文档使用查询运算符来指定搜索条件。

把下面的查询过滤器文档直接复制到过滤器搜索栏中:

{ scores: { type: "exam" } }

点击应用

查询过滤器返回sample_training.grades集合中的所有文档,其中scores字段包含考试分数类型。

相关文章:

  • 前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
  • 【C++】STL快速入门基础
  • 基于Docker部署GitLab环境搭建
  • 使用JSON_EXTRACT匹配某个json类型字段中的某个具体字段
  • Java集合框架详解:深入探讨Java中的集合框架
  • 【栈】Leetcode 71. 简化路径【中等】
  • 美团Java社招面试题真题,最新面试题
  • Srping 历史
  • ROS学习笔记(16):夹缝循迹
  • 类 和 对象(二)
  • 分享10个国内可以使用的GPT中文网站
  • 工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端
  • 四川汇聚荣科技有限公司好不好?
  • Day6 LeedCode: 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
  • 关于软件设计模式的理解
  • [iOS]Core Data浅析一 -- 启用Core Data
  • CSS相对定位
  • FineReport中如何实现自动滚屏效果
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL几个简单SQL的优化
  • PermissionScope Swift4 兼容问题
  • React Transition Group -- Transition 组件
  • SQLServer之创建显式事务
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 从零搭建Koa2 Server
  • 浮动相关
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 收藏好这篇,别再只说“数据劫持”了
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 在Unity中实现一个简单的消息管理器
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​虚拟化系列介绍(十)
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #ifdef 的技巧用法
  • #mysql 8.0 踩坑日记
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (CPU/GPU)粒子继承贴图颜色发射
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计大学生兼职系统
  • (生成器)yield与(迭代器)generator
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转) ns2/nam与nam实现相关的文件
  • .form文件_SSM框架文件上传篇
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .Net MVC4 上传大文件,并保存表单
  • .NET多线程执行函数
  • @JsonSerialize注解的使用
  • [20171102]视图v$session中process字段含义
  • [Android Pro] AndroidX重构和映射
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)