MongoDB दस्तावेज़ के अंदर सरणी (array) आइटम्स को एक्सेस करने के लिए डॉट (.) नोटेशन का उपयोग किया जाता है। यह MongoDB में नेस्टेड डेटा क्वेरी करने का सबसे सरल और सामान्य तरीका है।
उदाहरण: छात्र विवरण संग्रह बनाना
सबसे पहले, हम एक संग्रह बनाते हैं जिसमें छात्रों के नाम और अंक वाली सरणी वाले दस्तावेज़ हों:
> db.demo29.insertOne({"StudentDetails":[{"StudentName":"Chris","StudentMarks":58},{"StudentName":"Bob","StudentMarks":69}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15fcc08f2315c2efc48e6e") }
> db.demo29.insertOne({"StudentDetails":[{"StudentName":"David","StudentMarks":97},{"StudentName":"Carol","StudentMarks":96}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e15fcd38f2315c2efc48e6f") }
सभी दस्तावेज़ देखना
find() मेथड का उपयोग करके सभी दस्तावेज़ प्रदर्शित करें:
> db.demo29.find().pretty();
आउटपुट:
{
"_id" : ObjectId("5e15fcc08f2315c2efc48e6e"),
"StudentDetails" : [
{ "StudentName" : "Chris", "StudentMarks" : 58 },
{ "StudentName" : "Bob", "StudentMarks" : 69 }
]
}
{
"_id" : ObjectId("5e15fcd38f2315c2efc48e6f"),
"StudentDetails" : [
{ "StudentName" : "David", "StudentMarks" : 97 },
{ "StudentName" : "Carol", "StudentMarks" : 96 }
]
}
सरणी के अंदर विशिष्ट आइटम क्वेरी करना
डॉट नोटेशन का उपयोग करके सरणी के अंदर नेस्टेड फील्ड द्वारा दस्तावेज़ फ़िल्टर करें:
> db.demo29.find({"StudentDetails.StudentName":"David"});
यह केवल वही दस्तावेज़ लौटाता है जहां सरणी में कम से कम एक ऑब्जेक्ट में StudentName: "David" हो:
{
"_id" : ObjectId("5e15fcd38f2315c2efc48e6f"),
"StudentDetails" : [
{ "StudentName" : "David", "StudentMarks" : 97 },
{ "StudentName" : "Carol", "StudentMarks" : 96 }
]
}
मुख्य बिंदु
- डॉट नोटेशन (
arrayField.nestedField) सरणी के अंदर नेस्टेड फील्ड्स से मेल खाता है। - क्वेरी पूरे दस्तावेज़ को लौटाती है, न कि केवल मिलान करने वाला सरणी तत्व।
- केवल मिलान करने वाले सरणी तत्वों को प्रोजेक्ट करने के लिए,
$elemMatchप्रोजेक्शन या एग्रीगेशन पाइपलाइन का उपयोग करें।