I would like to retrieve a sub document from a document in MongoDB. I have the following document:
{
"_id" : "10000",
"password" : "password1",
"name" : "customer1",
"enabled" : true,
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
},
{
"id" : "10000-2",
"name" : "cust1chan2",
"enabled" : true
}
]
}
The result I would like is:
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}
However, the best I can do so far is using the following query:
db.customer.find({"channels.id" : "10000-1"}, {"channels.$" : 1, "_id" : 0})
But this gives me the following result:
{
"channels" : [
{
"id" : "10000-1",
"name" : "cust1chan1",
"enabled" : true
}
]
}
Does anyone know if it is possible to write a query that will give me my desired result? Any help would be much appreciated.
Subdocuments are documents embedded in other documents. In Mongoose, this means you can nest schemas in other schemas. Mongoose has two distinct notions of subdocuments: arrays of subdocuments and single nested subdocuments.
Accessing embedded/nested documents – In MongoDB, you can access the fields of nested/embedded documents of the collection using dot notation and when you are using dot notation, then the field and the nested field must be inside the quotation marks.
To search the array of object in MongoDB, you can use $elemMatch operator. This operator allows us to search for more than one component from an array object.
You can do it with Aggregation Framework. Query will be something like :
db.customer.aggregate([
{$unwind : "$channels"},
{$match : {"channels.id" : "10000-1"}},
{$project : {_id : 0,
id : "$channels.id",
name : "$channels.name",
enabled : "$channels.enabled"}}
])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With