Docs HomeMongoDB Manual

Query on Embedded/Nested Documents查询嵌入/嵌套文档


➤ Use the Select your language drop-down menu in the upper-right to set the language of the following examples.


This page provides examples of query operations on embedded/nested documents using the Collection.find() method in the MongoDB Node.js Driver.本页提供了使用MongoDB Node.js驱动程序中的Collection.find()方法对嵌入/嵌套文档进行查询操作的示例。

The examples on this page use the inventory collection. 此页面上的示例使用inventory集合。Connect to a test database in your MongoDB instance then create the inventory collection:连接到MongoDB实例中的测试数据库,然后创建inventory集合:

await db.collection('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'
}
]);

Match an Embedded/Nested Document匹配嵌入/嵌套文档

To specify an equality condition on a field that is an embedded/nested document, use the query filter document { <field>: <value> } where <value> is the document to match.若要在作为嵌入/嵌套文档的字段上指定相等条件,请使用查询筛选器文档{ <field>: <value> },其中<value>是要匹配的文档。

For example, the following query selects all documents where the field size equals the document { h: 14, w: 21, uom: "cm" }:例如,以下查询选择字段size等于文档{ h: 14, w: 21, uom: "cm" }的所有文档:

const cursor = db.collection('inventory').find({
size: { h: 14, w: 21, uom: 'cm' }
});

Equality matches on the whole embedded document require an exact match of the specified <value> document, including the field order. 整个嵌入文档上的相等匹配要求与指定的<value>文档完全匹配,包括字段顺序。For example, the following query does not match any documents in the inventory collection:例如,以下查询与inventory集合中的任何文档都不匹配:

const cursor = db.collection('inventory').find({
size: { w: 21, h: 14, uom: 'cm' }
});

Query on Nested Field查询嵌套字段

To specify a query condition on fields in an embedded/nested document, use dot notation ("field.nestedField").若要对嵌入/嵌套文档中的字段指定查询条件,请使用点表示法"field.nestedField")。

Note

When querying using dot notation, the field and nested field must be inside quotation marks.使用点表示法进行查询时,字段和嵌套字段必须位于引号内。

Specify Equality Match on a Nested Field在嵌套字段上指定相等匹配

The following example selects all documents where the field uom nested in the size field equals "in":以下示例选择嵌套在size字段中的字段uom等于"in"的所有文档:

const cursor = db.collection('inventory').find({
'size.uom': 'in'
});

Specify Match using Query Operator使用查询运算符指定匹配

A query filter document can use the query operators to specify conditions in the following form:查询筛选文档可以使用查询运算符以以下形式指定条件:

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

The following query uses the less than operator ($lt) on the field h embedded in the size field:以下查询在size字段中嵌入的字段h上使用小于运算符($lt):

const cursor = db.collection('inventory').find({
'size.h': { $lt: 15 }
});

Specify AND Condition指定AND条件

The following query selects all documents where the nested field h is less than 15, the nested field uom equals "in", and the status field equals "D":以下查询选择嵌套字段h小于15、嵌套字段uom等于"in"status字段等于"D"的所有文档:

const cursor = db.collection('inventory').find({
'size.h': { $lt: 15 },
'size.uom': 'in',
status: 'D'
});

Additional Query Tutorials其他查询教程

For additional query examples, see:有关其他查询示例,请参阅: