यह ध्यान में रखते हुए कि अपेक्षित परिणाम summary
. से संख्याएं और मान हैं संग्रह संख्याएँ हैं (अन्यथा आपको उन्हें संख्याएँ बनाने की आवश्यकता है) यहाँ एक एकत्रीकरण है जो परिणाम की गणना करता है:
db.getCollection('userpricing').aggregate([
{$group: {
_id:"$user_id",
user_id: {$first: "$user_id"},
Totalpositiveprice:{$sum:{$cond:[{ '$gt': ['$price', 0]}, "$price", 0]}},
Totalnegativeprice:{$sum:{$cond:[{ '$lt': ['$price', 0]}, "$price", 0]}},
Balanceprice:{"$sum":"$price"}}
},
{
$lookup:
{
from: "summary",
localField: "user_id",
foreignField: "user_id",
as: "user_id2"
}
},
{$project: {
_id:0,
user_id:1,
Totalpositiveprice: {$sum: ["$Totalpositiveprice", {$sum: "$user_id2.Totalpositiveprice"}] },
Totalnegativeprice: {$sum: ["$Totalnegativeprice", {$sum: "$user_id2.Totalnegativeprice"}] },
Balanceprice: {$sum: ["$Balanceprice", {$sum: "$user_id2.Balanceprice"}] },
}},
{$out: "summary"}
]).pretty()
परिणाम:
db.summary.find().pretty()
{
"_id" : ObjectId("584fde2906c7385883be0d15"),
"user_id" : 2,
"Totalpositiveprice" : 10000,
"Totalnegativeprice" : 0,
"Balanceprice" : 10000
}
{
"_id" : ObjectId("584fde2906c7385883be0d16"),
"user_id" : 1,
"Totalpositiveprice" : 23000,
"Totalnegativeprice" : -10000,
"Balanceprice" : 13000
}
बाद में आपको जरूरत पड़ने पर उन्हें स्ट्रिंग में बदलने की जरूरत है।
नोट: परिणाम यह सारांश संग्रह को नए परिकलित (और अपडेट किए गए) मानों के साथ ओवरराइड करता है। पहले अपने परिणामों का बेहतर परीक्षण करें।