In my collection I have two nested sub-documents, respectively called "levels" and "modules":
[
{
"_id": 1,
"course": "course1",
"levels": [
{
"level_id": "C1L1",
"name": "course 1 - level1",
"modules": [
{
"module_id": "C1L1M1",
"name": "level 1module1"
},
{
"module_id": "C1L1M2",
"name": "level 1 module2"
},
]
},
{
"level_id": "C1L2",
"name": "course 1 - level2",
"modules": [
{
"module_id": "C1L2M1",
"name": "level 2 module1"
},
{
"module_id": "C1L1M2",
"name": "level 2 module2"
},
]
},
]
},
{
"_id": 2,
"course": "course2",
"levels": [
{
"level_id": "C2L1",
"name": "course 2 - level1",
"modules": [
{
"module_id": "C2L1M1",
"name": "level1 module1"
},
{
"module_id": "C2L1M2",
"name": "level1 module2"
},
]
},
{
"level_id": "C2L2",
"name": "course 2 - level2",
"modules": [
{
"module_id": "C2L2M1",
"name": "level 2 module1"
},
{
"module_id": "C2L1M2",
"name": "level 2 module2"
},
]
},
]
},
]
I need to get only one sub-document that matches criteria, for example {"module_id": "C1L2M1"} .
I already know exactly how to achieve this using the aggregation framework, but I want to know if there is any solution avoiding aggregation.
I can retrieve only one nested sub-document using $elemMatch inside the projection, but I can't figure out how to filter the second nested sub-document (modules, in my example).
My desired result is query module "C1L2M1" and get only this:
{
"module_id": "C1L2M1",
"name": "level 2 module1"
}
Here an example playground: https://mongoplayground.net/p/uwBOh1MkQm-