MongoDB एग्रीगेशन में सबडॉक्यूमेंट फ़ील्ड्स पर सॉर्टिंग और प्रोजेक्शन
जब डेटा सबडॉक्यूमेंट (नेस्टेड ऑब्जेक्ट) में संग्रहीत होता है, तो एग्रीगेशन पाइपलाइन का उपयोग करके आप सबडॉक्यूमेंट फ़ील्ड्स को निकाल सकते हैं, सॉर्ट कर सकते हैं, और प्रोजेक्ट कर सकते हैं।
सैंपल डेटा बनाना
> db.demo236.insertOne({"details":{"Name":"Chris","Age":21}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e419015f4cebbeaebec514c") }
> db.demo236.insertOne({"details":{"Name":"David","Age":23}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e41901cf4cebbeaebec514d") }
> db.demo236.insertOne({"details":{"Name":"Bob","Age":24}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e419023f4cebbeaebec514e") }
सभी दस्तावेज़ देखना
> db.demo236.find();
आउटपुट:
एग्रीगेशन: सबडॉक्यूमेंट फ़ील्ड्स निकालें और नाम द्वारा डिसेंडिंग सॉर्ट करें
> db.demo236.aggregate([ { $project: { Name: '$details.Name', Age: '$details.Age' }}, { $sort: { Name: -1 } } ]);आउटपुट:
नोट: $unwind यहां अनावश्यक है
मूल उदाहरण में
{ $unwind: "$details" }शामिल था, लेकिन चूंकिdetailsएक ऑब्जेक्ट है (ऐरे नहीं),$unwindकी आवश्यकता नहीं है। सीधे$projectमें डॉट नोटेशन का उपयोग करें।सबडॉक्यूमेंट पर क्वेरी करना
> // सबडॉक्यूमेंट फ़ील्ड द्वारा फ़िल्टर > db.demo236.find({ "details.Age": { $gt: 22 } }); > // सबडॉक्यूमेंट फ़ील्ड द्वारा सॉर्ट (find के साथ) > db.demo236.find().sort({ "details.Name": 1 });मुख्य बिंदु
- सबडॉक्यूमेंट फ़ील्ड्स एक्सेस करने के लिए डॉट नोटेशन:
"details.Name" $projectमें भी डॉट नोटेशन:Name: "$details.Name"$unwindकेवल ऐरे के लिए आवश्यक है, ऑब्जेक्ट्स के लिए नहीं