MongoDB CRUD操作:内嵌文档查询

MongoDB内嵌文档的查询

文章目录

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

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

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

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

js 复制代码
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")。使用点表示法查询时,字段和嵌套字段必须在引号内,

嵌套字段的相等匹配

js 复制代码
db.inventory.find( { "size.uom": "in" } )

使用查询操作符进行匹配

js 复制代码
{ <field1>: { <operator1>: <value1> }, ... }

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

js 复制代码
db.inventory.find( { "size.h": { $lt: 15 } } )

指定AND条件

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

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

嵌套文档的匹配

可使用查询过滤器文档{ <field>: <value> }在嵌套文档的字段上指定相等条件,其中<value>是要匹配的文档。

例如,下面的查询选择字段size等于文档{ h: 14, w: 21, uom: "cm" }的所有文档:

js 复制代码
db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )

MongoDB不建议对内嵌文档进行相等匹配,因为需要指定的<value>文档的精确匹配,包括字段顺序。

例如,以下查询与inventory集合中的任何文档均不匹配:

js 复制代码
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字段指定查询过滤文档。查询过滤文档使用查询运算符来指定搜索条件。

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

js 复制代码
{ scores: { type: "exam" } }

点击应用

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

相关推荐
Elastic 中国社区官方博客10 分钟前
使用 Elasticsearch 和 Jina 进行 AI 视频搜索:精准找到你需要的视频片段秒数
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
Omics Pro15 分钟前
新型条件传输模型!虚拟细胞扰动预测
数据库·人工智能·算法·机器学习·自然语言处理
实验室管理云平台17 分钟前
环境检测实验室管理系统:提升效率与数据准确性的关键工具
大数据·数据库·科技
SelectDB技术团队1 小时前
快手基于 Apache Doris 千亿多模态检索的实践
数据库·数据分析·全文检索·快手·apache doris·向量索引·多模态检索
政企项目老覃1 小时前
金融转账“幽灵失败“排查实录:从本地消息表到 Seata TCC 的选型与权衡
数据库·程序人生·性能优化·数据分析·系统架构
TLA技术1 小时前
LogMiner vs 裸日志解析(三):Oracle日志解析中的“前镜像”和“后镜像”,到底怎么用?
数据库·oracle·flink·dba·迁移学习
IT邦德1 小时前
BIC-QA如何重新定义数据库知识服务
运维·数据库
逐米时代1 小时前
BOM智能构建:全链路一致性自动校验
大数据·数据库·人工智能
SelectDB技术团队2 小时前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
数据库·人工智能·sql·clickhouse·apache doris·selectdb·湖仓架构升级
Gauss松鼠会2 小时前
GaussDB 系统表与系统视图详解(内网运维版)
运维·服务器·网络·数据库·gaussdb·经验总结