एग्रीगेशन पाइपलाइन के साथ नेस्टेड सरणी में अधिकतम
दस्तावेज़ों में नेस्टेड सरणी (StudentDetails) के अंदर किसी फील्ड (StudentMathScore) का **उच्चतम मान** ढूंढने के लिए, एग्रीगेशन पाइपलाइन का उपयोग करें: $project, $unwind, $sort, $limit।
उदाहरण: डेटा डालना
> db.findHighestValueDemo.insertOne(
... {
... _id: 10001,
... "StudentDetails": [
... { "StudentName": "Chris", "StudentMathScore": 56 },
... { "StudentName": "Robert", "StudentMathScore": 47 },
... { "StudentName": "John", "StudentMathScore": 98 }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 10001 }
> db.findHighestValueDemo.insertOne(
... {
... _id: 10002,
... "StudentDetails": [
... { "StudentName": "Ramit", "StudentMathScore": 89 },
... { "StudentName": "David", "StudentMathScore": 76 },
... { "StudentName": "Bob", "StudentMathScore": 97 }
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 10002 }
एग्रीगेशन क्वेरी
> db.findHighestValueDemo.aggregate([
... {$project: {"StudentDetails.StudentName":1, "StudentDetails.StudentMathScore":1}},
... {$unwind: "$StudentDetails"},
... {$sort: {"StudentDetails.StudentMathScore": -1}},
... {$limit: 1}
... ]).pretty();
आउटपुट
चरण व्याख्या:
$project: केवल आवश्यक फील्ड रखता है।$unwind:StudentDetailsसरणी को डी-कंस्ट्रक्ट करता है, प्रत्येक तत्व के लिए एक अलग दस्तावेज़ आउटपुट करता है।$sort: स्कोर के अनुसार अवरोही क्रम में क्रमबद्ध करता है।$limit: 1: शीर्ष 1 परिणाम लेता है (उच्चतम स्कोर)।वैकल्पिक (प्रति दस्तावेज़ अधिकतम): यदि आपको **प्रत्येक** दस्तावेज़ के लिए उसके अपने सरणी का अधिकतम चाहिए, तो
$maxएक्यूमुलेटर के साथ$groupया$reduceका उपयोग करें।