$unwind और JavaScript फ़ंक्शन से सबडॉक्यूमेंट्स को फ़्लैट करें
जब एक डॉक्यूमेंट में ऐरे ऑफ़ सबडॉक्यूमेंट्स हो और आप प्रत्येक सबडॉक्यूमेंट को अलग लाइन में प्रिंट करना चाहें, तो $unwind के साथ एग्रीगेशन और कर्सर इटरेशन का उपयोग करें।
उदाहरण: संग्रह बनाना
> db.demo183.insertOne({
"_id": "110",
"DueDate": ISODate("2020-02-04T01:10:42.000Z"),
"ProductDetails": [
{"ProductName": "Product-1", "isAvailable": true},
{"ProductName": "Product-2", "isAvailable": false}
]
});
{ "acknowledged": true, "insertedId": "110" }
डॉक्यूमेंट देखना
> db.demo183.find().pretty();
{
"_id": "110",
"DueDate": ISODate("2020-02-04T01:10:42Z"),
"ProductDetails": [
{"ProductName": "Product-1", "isAvailable": true},
{"ProductName": "Product-2", "isAvailable": false}
]
}
सबडॉक्यूमेंट्स को एक लाइन में प्रिंट करने की क्वेरी
> var productdata = function(d) {
print(d.DueDate + ", " + d.ProductDetails.ProductName + ", " + d.ProductDetails.isAvailable);
}
> var iterator = db.demo183.aggregate([
{$match: {_id: "110"}},
{$unwind: '$ProductDetails'}
]);
> iterator.forEach(productdata);
आउटपुट:
Tue Feb 04 2020 06:40:42 GMT+0530 (India Standard Time), Product-1, true Tue Feb 04 2020 06:40:42 GMT+0530 (India Standard Time), Product-2, false
प्रत्येक सबडॉक्यूमेंट अब अलग लाइन पर प्रिंट होता है।