Query on Embedded/Nested Documents
This page provides examples of query operations on embedded/nested documents using the db.collection.find() method in mongosh.
The examples on this page use the inventory collection. Connect to a test database in your MongoDB instance then create the inventory collection:
| 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" } |
| ]); |
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.
For example, the following query selects all documents where the field size equals the document { h: 14, w: 21, uom: "cm" }:
| db.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. For example, the following query does not match any documents in the inventory collection:
| db.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").
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":
| db.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:
| db.inventory.find( { "size.h": { $lt: 15 } } ) |
Specify AND Condition
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":
| db.inventory.find( { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" } ) |
浙公网安备 33010602011771号