MongoDB10- 查询嵌套文档

插入测试数据

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" },{ item: "paper",qty: 100,status: "D" },{ item: "planner",qty: 75,size: { h: 22.85,w: 30,{ item: "postcard",qty: 45,size: { h: 10,w: 15.25,status: "A" }
]);

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

 

精确匹配嵌套文档

> db.inventory.find( { size: { h: 14,w: 21,uom: "cm" } } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9d"),"item" : "journal","qty" : 25,"size" : { "h" : 21,"uom" : "cm" },"status" : "A" }

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

db.inventory.find(  { size: { w: 

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

 

查询嵌套字段

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

"field.nestedField"

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

 

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

> db.inventory.find( { "size.uom": "in" } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9e"),"item" : "notebook",1); font-weight: bold">50,1); font-weight: bold">8.5,1); font-weight: bold">11,"uom" : "" },"status" : "A" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9f"),"item" : "paper",1); font-weight: bold">100,1)">in" },"status" : "D" } 

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

 

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

> db.inventory.find( { "size.h": { $lt: 15 } } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9d"),"status" : "A" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9e"),"status" : "D" }
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35aa1"),"item" : "postcard",1); font-weight: bold">45,1); font-weight: bold">10,1); font-weight: bold">15.25,"status" : "A" }

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

 

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

15 },"size.uom": "",status: "D" } )
{ "_id" : ObjectId("60b5e622dd6e93ee8bf35a9f"),"status" : "D" }

三个条件必须同时满足

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

 

重点

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

db.inventory.find( { status: "D" } )

 

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

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

 

相关文章

文章浏览阅读552次。com.mongodb.MongoQueryException: Quer...
文章浏览阅读635次,点赞9次,收藏8次。MongoDB 是一种 NoSQ...
文章浏览阅读2.1k次。和。_mongodb 日期类型
文章浏览阅读1.7k次。Scalestack等客户期待使用MongoDB Atla...
文章浏览阅读970次。SpringBoot整合中间件mongodb、ES_sprin...
文章浏览阅读673次。MongoDB 简介_尚医通sql