对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

对嵌入/嵌套文档的查询

使用以下方法查询 MongoDB 中的嵌入式文档:


➤ 使用右上角的 Select your language(选择语言)下拉菜单,设置以下示例的语言或选择 MongoDB Compass。


本页提供了使用 mongosh 中的 db.collection.find() 方法对嵌入式/嵌套文档进行查询操作的示例。

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"指定嵌入式/嵌套文档中字段的查询条件。

注意

使用点表示法查询时,字段和嵌套字段必须位于引号内。

以下示例会选择嵌套在 size 字段中的 uom 字段等于 "in" 的所有文档:

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

查询筛选器文档可以使用查询运算符按照以下形式指定条件:

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

以下查询将对嵌入到 size 字段中的 h 字段使用小于运算符 ($lt):

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

以下查询选择嵌套字段 h 小于 15、嵌套字段 uom 等于 "in" 以及 status 字段等于 "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
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Database 标题下的 Clusters。

    会显示集群页面。

2
  1. 对于包含样本数据的集群,单击Browse Collections 。

  2. 在左侧导航窗格中,选择 sample_mflix 数据库。

  3. 选择 movies 集合。

3

在 Filter 字段中指定查询筛选器文档。查询筛选器文档使用查询运算符来指定搜索条件。

将以下查询筛选器文档复制到 Filter 搜索栏:

{ "awards.wins": 1 }
4

此查询过滤器会返回 sample_mflix.movies 集合中 awards 字段包含 { wins: 1 } 的所有嵌入式文档。

有关其他查询示例,请参阅: