[upravit na základě toho je to nyní možné v posledních verzích]
[Aktualizovaná odpověď] Můžete se dotázat následujícím způsobem, jak získat zpět název třídy a ID studenta, pouze pokud jsou již zapsáni.
db.student.find({},
{_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})
a dostanete zpět to, co jste očekávali:
{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
[Původní odpověď] V současné době není možné dělat to, co chcete. To je nešťastné, protože byste to mohli udělat, pokud by byl student uložen v poli jako objekt. Ve skutečnosti jsem trochu překvapen, že používáte pouze ObjectId(), protože to bude vždy vyžadovat, abyste vyhledali studenty, pokud chcete zobrazit seznam studentů zapsaných v konkrétním kurzu (nejprve vyhledejte seznam ID a poté vyhledejte jména ve sbírce studentů – dva dotazy místo jednoho!)
Pokud jste ukládali (jako příklad) ID a jméno v poli kurzu takto:
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
{id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
{id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
]
}
Váš dotaz by pak byl jednoduše:
db.course.find( { },
{ students :
{ $elemMatch :
{ id : ObjectId("51780f796ec4051a536015d0"),
name : "Sam"
}
}
}
);
Pokud by tento student byl zapsán pouze do CS 101, dostanete zpět:
{ "name" : "Literature" }
{ "name" : "Physics" }
{
"name" : "CS 101",
"students" : [
{
"id" : ObjectId("51780f796ec4051a536015cf"),
"name" : "John"
}
]
}