У меня есть 2 коллекции student_details и subject_details, где у каждого студента может быть несколько предметов, которые я храню в коллекции student_details в качестве справочного массива.
Теперь мне нужно получить сведения об ученике вместе с отфильтрованными предметами, где subject_details.status = ACTIVE.
Как этого добиться, используя $elemMatch
для $ref
объектов. Я использовал что-то вроде ниже, но он не возвращает никаких записей.
db.getCollection('student_details').find( { subjects: { $elemMatch: { $ref: "subject_details", status: 'ACTIVE' }}})
student_details
================
{
"_id" : "STD-1",
"name" : "XYZ",
"subjects" : [
{
"$ref" : "subject_details",
"$id" : "SUB-1"
},
{
"$ref" : "subject_details",
"$id" : "SUB-2"
},
{
"$ref" : "subject_details",
"$id" : "SUB-3"
}
]
}
subject_details
===============
{
"_id" : "SUB-1",
"name" : "MATHEMATICS",
"status" : "ACTIVE"
}
{
"_id" : "SUB-2",
"name" : "PHYSICS",
"status" : "ACTIVE"
}
{
"_id" : "SUB-3",
"name" : "CHEMISTRY",
"status" : "INACTIVE"
}