Aangezien de verwachte resultaten getallen zijn en de waarden uit summary
verzameling zijn getallen (anders moet je er getallen van maken) hier is een aggregatie die het resultaat berekent:
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()
Resultaat:
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
}
Later moet je ze desgewenst naar string converteren.
Opmerking: Het resultaat overschrijft de samenvattingsverzameling met nieuwe berekende (en bijgewerkte) waarden. Test eerst uw resultaten.