[rediger baseret på, at dette nu er muligt i nyere versioner]
[Opdateret svar] Du kan kun forespørge på følgende måde for at få klassens navn og elev-id tilbage, hvis de allerede er tilmeldt.
db.student.find({},
{_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})
og du vil få tilbage, hvad du forventede:
{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
[Originalt svar] Det er ikke muligt at gøre, hvad du vil gøre i øjeblikket. Dette er uheldigt, fordi du ville være i stand til at gøre dette, hvis eleven blev gemt i arrayet som et objekt. Faktisk er jeg lidt overrasket over, at du kun bruger ObjectId(), da det altid vil kræver, at du slår eleverne op, hvis du vil vise en liste over studerende, der er tilmeldt et bestemt kursus (slå først op på listen over Id'er, og slå derefter navne op i elevsamlingen - to forespørgsler i stedet for én!)
Hvis du lagrede (som et eksempel) et id og navn i kursusarrayet sådan her:
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
{id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
{id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
]
}
Din forespørgsel ville da blot være:
db.course.find( { },
{ students :
{ $elemMatch :
{ id : ObjectId("51780f796ec4051a536015d0"),
name : "Sam"
}
}
}
);
Hvis den studerende kun var tilmeldt CS 101, ville du få tilbage:
{ "name" : "Literature" }
{ "name" : "Physics" }
{
"name" : "CS 101",
"students" : [
{
"id" : ObjectId("51780f796ec4051a536015cf"),
"name" : "John"
}
]
}