विभिन्न कलेक्शन एलिमेंट्स में यूनिक प्रॉपर्टीज का योग निकालने के लिए, $cond के साथ $group का उपयोग करें। यह परिणामी कीमत देता है।
आइए दस्तावेजों के साथ एक कलेक्शन बनाते हैं:
> db.demo580.insertOne({
"Name":"John",
"Id1":"110",
"Id2":"111",
"Price":10.5
}); { "acknowledged" : true, "insertedId" : ObjectId("5e918cebfd2d90c177b5bcae") }
> db.demo580.insertOne({
"Name":"John",
"Id1":"111",
"Id2":"",
"Price":9.5
}); { "acknowledged" : true, "insertedId" : ObjectId("5e918cecfd2d90c177b5bcaf") }
find() मेथड की मदद से कलेक्शन के सभी दस्तावेज प्रदर्शित करें:
> db.demo580.find();
यह निम्न आउटपुट देगा:
{ "_id" : ObjectId("5e918cebfd2d90c177b5bcae"), "Name" : "John", "Id1" : "110", "Id2" : "111", "Price" : 10.5 }
{ "_id" : ObjectId("5e918cecfd2d90c177b5bcaf"), "Name" : "John", "Id1" : "111", "Id2" : "", "Price" : 9.5 }
विभिन्न कलेक्शन एलिमेंट्स में यूनिक प्रॉपर्टीज का योग निकालने के लिए क्वेरी:
> db.demo580.aggregate([
{
$project: {
Id1: 1,
Id2: 1,
Price: 1,
match: {
$cond: [
{$eq: ["$Id2", ""]},
"$Id1",
"$Id2"
]
}
}
},
{
$group: {
_id: '$match',
Price: {$sum: '$Price'},
resultId: {
$addToSet: {
$cond: [
{$eq: ['$match', '$Id1']},
null,
'$Id1'
]
}
}
}
},
{$unwind: '$resultId'},
{$match: { resultId: { $ne: null } }},
{
$project: {
Id1: '$resultId',
Price: 1,
_id: 0
}
}
])
यह निम्न आउटपुट देगा:
{ "Price" : 20, "Id1" : "110" }