MongoDB एग्रीगेशन में $addFields और $size का उपयोग करके नेस्टेड ऐरे की गिनती जोड़ना
MongoDB में $addFields और $map के साथ $size का उपयोग करके नेस्टेड ऐरे के आकार की गणना करें और नए फील्ड के रूप में जोड़ें।
उदाहरण: संग्रह और दस्तावेज़ बनाना
> db.demo429.insertOne({
"_id": 101,
"Value": 3,
"details": [
{
"Age": 29,
"Value": 3,
"details1": [1, 2, 3]
},
{
"Age": 31,
"Value": 4,
"details1": [354]
}
]
});
{ "acknowledged" : true, "insertedId" : 101 }
दस्तावेज़ देखना
> db.demo429.find();
आउटपुट:
{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "Value" : 3, "details1" : [ 1, 2, 3 ] }, { "Age" : 31, "Value" : 4, "details1" : [ 354 ] } ] }
नेस्टेड ऐरे details1 की गिनती जोड़ने के लिए एग्रीगेशन
> db.demo429.aggregate([
{
"$addFields": {
"details": {
"$map": {
"input": "$details",
"as": "d",
"in": {
"Age": "$$d.Age",
"NumberOfDetails1": { "$size": "$$d.details1" }
}
}
}
}
}
])
आउटपुट:
{ "_id" : 101, "Value" : 3, "details" : [ { "Age" : 29, "NumberOfDetails1" : 3 }, { "Age" : 31, "NumberOfDetails1" : 1 } ] }
व्याख्या:
$addFields- मौजूदा फील्ड्स में नए फील्ड्स जोड़ता है या मौजूदा को ओवरराइट करता है$map- details ऐरे के प्रत्येक एलिमेंट को ट्रांसफॉर्म करता है$$d.details1- वर्तमान एलिमेंट का details1 ऐरे$size- ऐरे की लंबाई लौटाता है- नया फील्ड
NumberOfDetails1प्रत्येक सब-ऑब्जेक्ट में जुड़ जाता है
उपयोगी वेरिएशन:
// टॉप-लेवल फील्ड के रूप में गिनती जोड़ना
{$addFields: { detailsCount: { $size: "$details" } }}
// शर्त के साथ गिनती
{$addFields: {
activeCount: {
$size: {
$filter: { input: "$details", as: "d", cond: { $eq: ["$$d.status", "active"] } }
}
}
}}
// $project में उपयोग
{$project: {
details: 1,
count: { $size: "$details" }
}}
नोट: $size केवल ऐरे पर काम करता है; फील्ड गायब या नल होने पर त्रुटि देता है। $ifNull से हैंडल करें।