[редактиране въз основа на това, което сега е възможно в последните версии]
[Актуализиран отговор] Можете да направите заявка по следния начин, за да получите обратно името на класа и идентификатора на ученика само ако те вече са записани.
db.student.find({},
{_id:0, name:1, students:{$elemMatch:{$eq:ObjectId("51780f796ec4051a536015cf")}}})
и ще получите обратно това, което сте очаквали:
{ "name" : "CS 101", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
{ "name" : "Literature" }
{ "name" : "Physics", "students" : [ ObjectId("51780f796ec4051a536015cf") ] }
[Оригинален отговор] Не е възможно да правите това, което искате да правите в момента. Това е жалко, защото бихте могли да направите това, ако ученикът е бил съхранен в масива като обект. Всъщност, малко съм изненадан, че използвате само ObjectId(), тъй като това винаги изискват от вас да потърсите студентите, ако искате да покажете списък със студенти, записани в конкретен курс (първо потърсете списъка с идентификатори, след което потърсете имена в колекцията на студентите – две заявки вместо една!)
Ако съхранявате (като пример) идентификатор и име в масива на курса по следния начин:
{
"_id" : ObjectId("51780fb5c9c41825e3e21fc6"),
"name" : "Physics",
"students" : [
{id: ObjectId("51780f796ec4051a536015cf"), name: "John"},
{id: ObjectId("51780f796ec4051a536015d0"), name: "Sam"}
]
}
Тогава вашата заявка ще бъде просто:
db.course.find( { },
{ students :
{ $elemMatch :
{ id : ObjectId("51780f796ec4051a536015d0"),
name : "Sam"
}
}
}
);
Ако този ученик беше записан само в CS 101, ще получите обратно:
{ "name" : "Literature" }
{ "name" : "Physics" }
{
"name" : "CS 101",
"students" : [
{
"id" : ObjectId("51780f796ec4051a536015cf"),
"name" : "John"
}
]
}