查询嵌入/嵌套文档

本文提供了使用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, 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" }
]);

嵌套文档查询

对嵌套文档的字段做等值查询的时候,使用query filter document {:} 其中****是等值匹配的文档。

下面的案例返回inventory集合中size字段的值等于**文档{ h: 14, w: 21, uom: "cm" }**的所有文档。

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

对嵌套文档整体做等值匹配的时候,要求的是对指定****文档的精确匹配,包含字段顺序。

下面的案例无法查询到任何文档。

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

嵌套文档中的字段

查询嵌套文档中的字段,使用dot notation("field.nestedField").

Note:

当在查询语句中使用".",字段和嵌套文档字段必须在引号内。

嵌套文档中的字段等值查询

下面的案例返回inventory集合中size字段中嵌套文档字段uom值等于**"in"**的所有文档。

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

使用查询操作符查询

query filter document中可以使用查询操作符指定多个查询条件,格式如下:

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

下面的查询语句在字段size中的嵌套文档字段h上面使用($lt)操作符:

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

使用AND条件

下面的案例返回inventory集合中size字段中嵌套文档字段h值小于15 并且 size字段中嵌套文档字段uom值等于**"in"** 并且status字段等于**"D"**的所有文档。

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

其他查询导航

其他查询案例:

原文链接:https://docs.mongodb.com/manual/tutorial/query-embedded-documents/

译者:张芷嘉

最后更新于