I'm trying to query the field "name" inside every engine:
Assuming this data sample:
db.collection.insert([
{ engines: { ahnlab: { name: "x", value: "1" }}},
{ engines: { ahnlab: { name: "y", value: "2" }}},
])
You can query all embedded fields name
using the dot-notation in the projection operator:
> db.collection.find({},{"engines.ahnlab.name": 1, "_id":0 })
{ "engines" : { "ahnlab" : { "name" : "x" } } }
{ "engines" : { "ahnlab" : { "name" : "y" } } }
"engines.ahnlab.name": 1
will instruct MongoDB to keep (1
) the embedded name field;
"_id": 0
will instruct MongoDB to not keep the _id
field.
If you need your output as a flat data structure, you should use the aggregation framework and the $project
operator to rewrite your documents:
> db.collection.aggregate([
{$project: { name: "$engines.ahnlab.name", _id: 0 }}
])
{ "name" : "x" }
{ "name" : "y" }
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…