У мене є дві колекції. Перша збірка містить студентів:
{ "_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"),
]
}