MongoDB एग्रीगेशन से स्लाइस-ऑफ-स्लाइस (स्लाइस चेन) प्राप्त करना
MongoDB में मल्टीडाइमेंशनल ऐरे से नेस्टेड स्लाइसिंग (स्लाइस का स्लाइस) करने के लिए एग्रीगेशन पाइपलाइन में मल्टीपल $unwind और $group का उपयोग करें।
उदाहरण: मल्टीडाइमेंशनल ऐरे वाला डॉक्यूमेंट बनाना
> db.sliceOfSliceDemo.insertOne(
... {
... "Name": "John",
... "Details": [["First 1:1", "First 1:2"],["second 2:1","Second 2:2"]]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5ccf3fcfdceb9a92e6aa195a") }
डॉक्यूमेंट देखना
> db.sliceOfSliceDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5ccf3fcfdceb9a92e6aa195a"), "Name" : "John", "Details" : [ [ "First 1:1", "First 1:2" ], [ "second 2:1", "Second 2:2" ] ] }
स्लाइस चेन क्वेरी: अंतिम एलिमेंट प्राप्त करना
> db.sliceOfSliceDemo.aggregate([
... {$match:{"Name":"John"}},
... {$unwind:"$Details"},
... {$unwind:"$Details"},
... {$group:{"_id":"$Name","Details":{$last:"$Details"}}},
... {$project:{"Name":"$_id","Details":1}}
... ]);
आउटपुट:
{ "_id" : "John", "Details" : "Second 2:2", "Name" : "John" }
पाइपलाइन समझ:
$match- "John" नाम वाले डॉक्यूमेंट्स फिल्टर- पहला
$unwind: "$Details"- बाहरी ऐरे फ्लैट:["First 1:1", "First 1:2"]और["second 2:1", "Second 2:2"] - दूसरा
$unwind: "$Details"- आंतरिक ऐरे फ्लैट: अलग-अलग स्ट्रिंग्स $group- नाम द्वारा ग्रुप,$lastसे अंतिम एलिमेंट लेता है$project- आउटपुट फॉर्मेट करता है
आधुनिक विकल्प (MongoDB 4.4+):
db.sliceOfSliceDemo.aggregate([
{ $match: { Name: "John" } },
{ $project: {
Name: 1,
LastElement: { $arrayElemAt: ["$Details", -1] } // अंतिम सब-ऐरे
}},
{ $project: {
Name: 1,
LastElement: { $arrayElemAt: ["$LastElement", -1] } // अंतिम एलिमेंट
}}
]);
यह अधिक पढ़ने योग्य और कुशल है।