Ich habe zwei Sammlungen. Die erste Sammlung enthält Studenten:
{ "_id" : ObjectId("51780f796ec4051a536015cf"), "name" : "John" }
{ "_id" : ObjectId("51780f796ec4051a536015d0"), "name" : "Sam" }
{ "_id" : ObjectId("51780f796ec4051a536015d1"), "name" : "Chris" }
{ "_id" : ObjectId("51780f796ec4051a536015d2"), "name" : "Joe" }
Die zweite Sammlung enthält Kurse:
{
"_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")
]
}
Jedes Kursdokument enthält ein studentsArray mit einer Liste der für den Kurs registrierten Studenten. Wenn ein Student einen Kurs auf einer Webseite anzeigt, muss er prüfen, ob er sich bereits für den Kurs angemeldet hat oder nicht. Wenn die coursesSammlung im Namen des Schülers abgefragt wird, müssen wir dazu herausfinden, ob das studentsArray bereits die ObjectId des Schülers enthält. Gibt es eine Möglichkeit, in der Projektion einer Suchabfrage anzugeben, dass ein Schüler nur dann ObjectIdaus dem studentsArray abgerufen werden soll, wenn er vorhanden ist?
Ich habe versucht zu sehen, ob ich den Operator $ elemMatch verwenden kann, aber er ist auf eine Reihe von Unterdokumenten ausgerichtet. Ich verstehe, dass ich ein Aggregationsframework verwenden könnte, aber es scheint, dass es in diesem Fall zu viel des Guten wäre. Das Aggregationsframework wäre wahrscheinlich nicht so schnell wie eine einzelne Suchabfrage. Gibt es eine Möglichkeit, die Kurssammlung abzufragen, damit das zurückgegebene Dokument eine ähnliche Form hat?
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc4"),
"name" : "CS 101",
"students" : [
ObjectId("51780f796ec4051a536015d0"),
]
}