[संपादित करें इसके आधार पर अब हाल के संस्करणों में संभव हो रहा है]
[अद्यतित उत्तर] आप कक्षा का नाम और छात्र आईडी वापस पाने के लिए निम्नलिखित तरीके से पूछ सकते हैं, यदि वे पहले से ही नामांकित हैं।
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"
}
]
}