1.插入案例
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" } ]);
2.匹配内嵌文档
db.inventory.find({size:{h:14,w:21,uom:"cm"}})
如果顺序不一致,则无法出正确数据
3 在嵌套字段中查找
db.inventory.find({"size.uom":"in"})
db.inventory.find({"size.h":{$lt:15}})
db.inventory.find({ "size.h":{$lt:15}, "size.uom":"in", status:"D" })
This page provides examples of query operations on embedded/nested documents using thedb.collection.find()
method in the mongo
shell. The examples on this page use the inventory
collection. To populate the inventory
collection, run the following:
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" }
]);
You can run the operation in the web shell below:
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 theinventory
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 the dot notation("field.nestedField"
).
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" } )
Additional Query Tutorials
For additional query examples, see: