У мене є дві колекції. Перша збірка містить студентів:
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }
Друга колекція містить курси:
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc5"),
"name" : "Literature",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d0"),
ObjectId("51780f796ec4051a536015d2")
]
}
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
ObjectId("51780f796ec4051a536015cf"),
ObjectId("51780f796ec4051a536015d0")
]
}
Кожен документ курсу містить studentsмасив із списком студентів, зареєстрованих на курс. Коли студент переглядає курс на веб-сторінці, йому потрібно перевірити, чи він уже зареєструвався на курс чи ні. Для цього, коли coursesколекція отримує запит від імені студента, нам потрібно з’ясувати, чи studentsвже масив містить ObjectId студента. Чи є спосіб вказати в проекції запиту пошуку, щоб отримати студента ObjectIdз studentsмасиву, лише якщо він є?
Я спробував перевірити, чи можу я оператор $ elemMatch, але він орієнтований на масив піддокументів. Я розумію, що я міг би використовувати структуру агрегування, але, здається, у цьому випадку це було б надмірно. Фреймворк агрегації, ймовірно, не буде таким швидким, як один запит пошуку. Чи є спосіб запитати колекцію курсів, щоб повернутий документ міг бути у формі, подібній до цієї?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}