MongoDB में सरणी फील्ड के अंदर न्यूनतम/अधिकतम जैसे एग्रीगेशन करने के लिए एग्रीगेशन पाइपलाइन में $min, $max ऑपरेटर का उपयोग सीधे सरणी फील्ड पर करें।
उदाहरण
लॉगिन वर्ष वाली सरणी के साथ दस्तावेज़ बनाएं:
> db.aggregateArrayDemo.insertOne(
{
"_id": 100,
"UserDetails": [
{"UserName": "John", "UserLoginYear": 2010},
{"UserName": "Carol", "UserLoginYear": 2019}
]
}
);
{ "acknowledged" : true, "insertedId" : 100 }
दस्तावेज़ देखें:
>> db.aggregateArrayDemo.find().pretty();
{ "_id" : 100, "UserDetails" : [ { "UserName" : "John", "UserLoginYear" : 2010 }, { "UserName" : "Carol", "UserLoginYear" : 2019 } ] }
सरणी में न्यूनतम और अधिकतम लॉगिन वर्ष प्राप्त करें
> db.aggregateArrayDemo.aggregate([
{$match: {_id: 100}},
{$project: {
Minimum: {$min: "$UserDetails.UserLoginYear"},
Maximum: {$max: "$UserDetails.UserLoginYear"}
}}
]);
आउटपुट:
{ "_id" : 100, "Minimum" : 2010, "Maximum" : 2019 }
व्याख्या:
$match- विशिष्ट दस्तावेज़ फिल्टर करता है (वैकल्पिक)$UserDetails.UserLoginYear- सरणी के सभी ऑब्जेक्ट से UserLoginYear निकालकर सरणी बनाता है: [2010, 2019]$min/$max- उस सरणी पर काम करके न्यूनतम/अधिकतम लौटाता है
अन्य सरणी एग्रीगेशन ऑपरेटर
| ऑपरेटर | विवरण |
|---|---|
$min | न्यूनतम मान |
$max | अधिकतम मान |
$avg | औसत |
$sum | योग |
$stdDevPop | जनसंख्या मानक विचलन |
$stdDevSamp | नमूना मानक विचलन |
प्रत्येक उपयोगकर्ता के लिए अलग-अलग एग्रीगेशन
db.aggregateArrayDemo.aggregate([
{$unwind: "$UserDetails"},
{$group: {
_id: "$UserDetails.UserName",
minYear: {$min: "$UserDetails.UserLoginYear"},
maxYear: {$max: "$UserDetails.UserLoginYear"}
}}
])
यह प्रत्येक उपयोगकर्ता के लिए अलग परिणाम देता है (यदि एकाधिक दस्तावेज़/प्रविष्टियां हों)।