Med tanke på att förväntade resultat är siffror och värdena från summary
samling är siffror (annars måste du göra dem till siffror) här är en aggregering som beräknar resultatet:
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()
Resultat:
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
}
Senare måste du konvertera dem till strängar om du behöver.
Obs! Resultatet åsidosätter sammanfattningssamlingen med nya beräknade (och uppdaterade) värden. Bättre testa dina resultat först.