Docs 主页 → 开发应用程序 → MongoDB Manual
查询嵌入式文档数组
您可以使用以下方法查询MongoDB中的文档:
您的编程语言的驱动程序。
MongoDB Atlas 用户界面。要了解更多信息,请参阅使用 MongoDB Atlas 查询文档阵列。
➤ 使用右上角的 Select your language(选择语言)下拉菜单,设置以下示例的语言或选择 MongoDB Compass。
查询嵌套在数组中的文档
以下示例选择 instock
数组中的元素与指定文档匹配的所有文档:
整个嵌入式/嵌套文档的相等匹配要求与指定文档精确匹配,包括字段顺序。例如,以下查询不匹配 inventory
集合中的任何文档:
在文档数组中的字段上指定查询条件
在文档数组中嵌入的字段上指定查询条件
如果您不知道嵌套在数组中的文档的索引位置,请使用点 (.
) 来连接数组字段的名称以及嵌套文档中的字段名称。
以下示例选择满足下列条件的所有文档——instock
数组至少有一份嵌入式文档包含字段 qty
且其值小于或等于 20
:
使用数组索引查询嵌入式文档中的字段
使用点符号,可以在数组的特定索引或位置为文档中的字段指定查询条件。该数组使用从零开始的索引。
注意
使用点符号查询时,字段和索引必须位于引号内。
以下示例选择所有满足如下条件的文档——instock
数组的第一个元素是包含值小于或等于 20
的 qty
字段的文档:
为文档数组指定多个条件
对嵌套在文档数组中的多个字段指定条件时,可指定查询,以使单个文档满足这些条件,或使数组中任意文档(包括单个文档)的组合满足这些条件。
单个嵌套文档满足嵌套字段的多个查询条件
使用 $elemMatch
操作符在大量嵌入式文档中指定多个条件,以使至少一个嵌入式文档满足所有指定条件。
以下示例查询满足如下条件的文档——instock
数组至少有一份嵌入式文档,该文档同时包含等于 5
的字段 qty
和等于 A
的字段 warehouse
:
以下示例将查询 instock
数组至少包含一个嵌入文档,且该文档包含大于 qty
且小于或等于 20
的字段 10
:
组合满足标准的元素
如果数组字段上的复合查询条件没有使用 $elemMatch
操作符,则查询会选择如下文档:数组中包含满足条件的任意元素的组合。
例如,以下查询匹配如下文档:嵌套在 instock
数组内的任何文档的 qty
字段大于 10
且该数组中的任何文档(不一定是同一份嵌入式文档)的 qty
字段小于或等于 20
:
以下示例查询符合以下条件的文档 — instock
数组至少有一个包含等于 5
的字段 qty
的嵌入式文档,以及至少一个包含等于 A
的字段 warehouse
的嵌入式文档(但不一定是同一个嵌入式文档):
使用 MongoDB Atlas 查询文档数组
本节中的示例使用示例训练数据集。要了解如何将示例数据集加载到您的 MongoDB Atlas 部署中,请参阅加载示例数据。
要在 MongoDB Atlas 中查询文档数组,请按照以下步骤操作:
其他查询教程
有关其他查询示例,请参阅: