首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MongoDB(10)- 查询嵌套文档

MongoDB(10)- 查询嵌套文档

作者头像
小菠萝测试笔记
发布于 2021-06-09 14:15:54
发布于 2021-06-09 14:15:54
2.2K00
代码可运行
举报
运行总次数:0
代码可运行

插入测试数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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" }
]);

后面的栗子都会用到这里的测试数据

精确匹配嵌套文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.inventory.find( { size: { h: 14, w: 21, uom: "cm" } } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9d"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }

这种写法不仅需要嵌套文档的字段、值相同,字段顺序也得一致

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.inventory.find(  { size: { w: 21, h: 14, uom: "cm" } }  )

换了个字段顺序就查不到同一条文档了

查询嵌套字段

要在嵌入/嵌套文档中的字段上指定查询条件,语法格式如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"field.nestedField"

JSON 取值一样,用 . 来找下一级的字段

栗子一:嵌套字段等于操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.inventory.find( { "size.uom": "in" } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9e"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9f"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" } 

size 字段值是一个文档,找到嵌套文档的 h 字段值等于 in 的所有文档

栗子二:嵌套字段结合单个查询条件操作符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.inventory.find( { "size.h": { $lt: 15 } } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9d"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9e"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9f"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35aa1"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }

size 字段值是一个文档,找到嵌套文档的 h 字段值小于 15 的所有文档

栗子三:多个不同嵌套字段结合 and 操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9f"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }

三个条件必须同时满足

  • size 字段,嵌套文档的 h 字段值小于 15
  • size 字段,嵌套文档的 uom 字段值等于 in
  • status 字段值等于 D

重点

如果是指定单个字段的时候,可以不需要加 ""(当然,加了也无妨),比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.inventory.find( { status: "D" } )

如果是指定嵌套字段,必须加 "" ,比如上面的栗子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.inventory.find( { "size.uom": "in" } )
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB(9)- 文档查询操作之 find() 的简单入门
MongoDB 支持查询条件操作符,下表为 MongoDB 与 RDBMS(关系型数据库,Mysql)常见的查询条件操作符的对比
小菠萝测试笔记
2021/06/09
9690
MongoDB 学习笔记3 - 命令行操作示例
总结:MongoDB 可以每行数据的结构都不同,支持非结构化数据。 区别于 传统的严格结构化数据。
张云飞Vir
2021/07/23
3.5K0
MongoDB入门笔记
You can also view the log file to see the current status of your mongod process:
编程随想曲
2022/04/21
2370
mongodb系列(2)-基本的CURD的使用
MongoDB在插入一条数据后,会自动增加一个_id自动,作为主键,如果插入的文档省略了id字段,则会自动生产一个Object_id字段
爽朗地狮子
2022/10/21
6040
技术干货| 一文读懂如何查询 MongoDB 文档
点击下方公众号关注并分享获取 MongoDB 最新资讯 一.查询文档 本段提供了使用 mongo shell中 db.collection.find() 方法查询的案例。案例中使用的 inventory 集合数据可以通过下面的语句产生。db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },   { item: "notebook", qty: 50, s
MongoDB中文社区
2022/07/07
4.2K0
硬卷 NoSQL 数据库系列(二):MongoDB 安装与 CURD 基本操作
面介绍了:MongoDB 知识体系与基础概念相关的知识点。今天我将详细的为大家介绍MongoDB的安装和最基本的CURD操作的相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!
民工哥
2023/08/25
2800
硬卷 NoSQL 数据库系列(二):MongoDB 安装与 CURD 基本操作
MongoDB(13)- 查询操作返回指定的字段
答案是不能的,如果想指定 <projection> 是包含字段,那所有字段值都得统一是 1,相反如果是不包含,也必须都是 0
小菠萝测试笔记
2021/06/10
6.8K0
MongoDB Document CRUD Operations
通过在find方法中传入Query Filter Documents,Query Filter Documents可以完成对特定记录的读取、更新和删除操作,格式如下:
shysh95
2024/06/14
3120
MongoDB Document CRUD Operations
MongoDB(8)- 文档删除操作
deleteMany() 语法格式 db.collection.deleteMany( <filter>, { writeConcern: <document>, collation: <document> } ) remove() 语法格式 语法一 db.collection.remove( <query>, <justOne> ) 语法二 db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document>, collation: <document> } ) 参数说明
小菠萝测试笔记
2021/06/09
7560
MongoDB(8)- 文档删除操作
MongoDB的CRUD操作讲解-1-insert
插入操作 //插入一条数据 db.inventory.insert( { item: "ABC1", details: { model: "14Q3", manufacturer: "XYZ Company" }, stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ], category: "clothing" } ) //验证插入是否成功 db.invent
字母哥博客
2020/09/23
3910
MongoDB基本概念
Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。Mongodb是一款非关系型数据库,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型,关系数据库的所使用的SQL语句自从 IBM 发明出来以后,已经有 40 多年的历史了,但是时至今日,开发程序员一般不太喜欢这个东西,因为它的基本理念和程序员编程的想法不一致。后来所谓的 NoSQL 风,指的就是那些不用 SQL 作为查询语言的数据存储系统,而文档数据库 MongoDB 正是 NoSQL 的代表。看一下当下数据库的排名就会发现,目前排在Mongodb数据库前面的无一例外是老牌的关系型数据库,而在NoSQL序列中,Mongodb排名第一,且有上升的趋势。
Java廖志伟
2022/03/07
6.8K0
MongoDB基本概念
MongoDB入门实操《下篇》
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
Wu_Candy
2022/07/04
2270
MongoDB 索引创建
七、更多参考 MongoDB 单键(列)索引 MongoDB 复合索引 MongoDB 多键索引 MongoDB 执行计划获取(db.collection.explain()) MongoDB 唯一索引 MongoDB 部分索引 MongoDB 稀疏(间隙)索引(Sparse Indexes)
Leshami
2018/08/08
2.9K0
MongoDB从安装到可视化工具使用
openssl如果已安装(输入openssl version查看),若版本不是1.1可参考以下博客升级openssl: 升级openssl libssl.so.1.1报错 `GLIBC_2.18报错
唔仄lo咚锵
2021/12/31
6440
MongoDB从安装到可视化工具使用
mongodb 学习五,聚合操作实操
在 users 里面准备一组数据,包含 item ,qty,status,tags 和 size 字段,其中 size 是内嵌文档,size 里面又包含了 h,w,uom 字段
阿兵云原生
2023/02/16
5030
索引实操练习
向 mydoc 集合中,插入多条数据,mydoc 之前是没有存在过的,我们直接使用 db.mydoc.insertMany() ,mongodb 会默认给我们新建这个集合
阿兵云原生
2023/02/16
2980
MongoDB(11)- 查询数组
如果希望找到的是包含 red、blank 两个元素的数组,可以使用 $all 操作符
小菠萝测试笔记
2021/06/09
2.5K0
MongoDB(12)- 查询嵌入文档的数组
查询 instock 数组中包含 { warehouse: "A", qty: 5 } 的所有文档
小菠萝测试笔记
2021/06/10
4.9K1
mongodb的CRUD操作详解2-find
查询操作 比较运算符 英文 数学符号 $lt Lower Than < $lte Lower Than or Euqal <= $gt Greater Than > $gte Greater Than or Equal >= $ne Not Equal != 逻辑运算符 含义 $or 或运算 $in 元素 In 集合(数组) $nin 元素 not In 集合(数组) $not 取反 //查询集合内所有文档,pretty格式化查询结果 db.inventory.find( {} ) db.invento
字母哥博客
2020/09/23
5340
安装和使用MongoDB
MongoDB是一个著名的NoSQL数据库,顾名思义就是不使用SQL的数据库,目前在很多场景都有使用。如果你不喜欢使用笨拙的各种SQL数据库,可以尝试使用一下MongoDB,会有不一样的感受。本文就是
乐百川
2018/01/09
4K0
安装和使用MongoDB
相关推荐
MongoDB(9)- 文档查询操作之 find() 的简单入门
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验