Я предположил, что документ выглядит как то, что находится внутри пользователя. Затем сначала выполняя агрегирование и сохраняя результат в курсоре, а затем, перебирая курсор, я могу обновить итоговое значение.
var output = db.test.aggregate([{"$match":{name:"Kid"}},{"$unwind":"$items"},{"$match":{"items.type":"SCHOOL"}},{"$group":{"_id":"$name","total" :{$sum: "$items.amount"}}}])
while (output.hasNext()) {
var doc = output.next();
print(doc._id);
print(doc.total);
db.test.update({"name":doc._id},{$set:{"total":doc.total}})
}
Final do c
{
"_id" : ObjectId("5f07e1616fddd269188c731c"),
"name" : "Kid",
"items" : [
{
"name" : "pencil",
"type" : "SCHOOL",
"amount" : 1
},
{
"name" : "computer",
"type" : "PERSONAL",
"amount" : 9999.99
},
{
"name" : "notebook",
"type" : "SCHOOL",
"amount" : 9
}
],
"total" : 10
}