如何对文档中的某些字段求和,并将此和放在另一个字段中



我有这样的文档:

{
"_id": {
"teamName": "BILALATI6449",
"tournamentId": "197831"
},
"players": [
{
"_id": "113069",
"points": 55
},
{
"_id": "249044",
"points": 0
},
{
"_id": "113129",
"points": 0
},
{
"_id": "196713",
"points": 0
},
{
"_id": "181056",
"points": 0
},
{
"_id": "2331078",
"points": 0
},
{
"_id": "7486355",
"points": 0
},
{
"_id": "113036",
"points": 0
},
{
"_id": "249047",
"points": 0
},
{
"_id": "658022",
"points": 0
},
{
"_id": "182623",
"points": 0
}
],
"totalTeamPoints": 0,
"__v": 0
}

每当任何积分字段更新时,我想对玩家阵列内对象中的所有积分求和,并将此和放入totalTeamPoints中。我怎样才能做到这一点。我正在使用猫鼬,但任何形式的帮助都很感激。

我认为这可能会有所帮助,也请根据自己的模态名称更改模态名称,类似文档到产品

const results = await Document.aggregate([
{ "$addFields": {
"totalTeamPoints": {
"$sum": "$players.points"
}
} },
]);

按条件更新玩家积分此处测试

db.collection.update({
"_id.teamName": "BILALATI6449"
},
{
$inc: {
"players.$[elem].points": 1
}
},
{
multi: true,
new : true,
arrayFilters: [ { "elem._id": { $eq: "113069" } } ]
})

更新总TeamPoints积分并返回修改后的文档在此处测试

db.collection.update({
"_id.teamName": "BILALATI6449"
},
[
{
$set: {
totalTeamPoints: { $sum: "$players.points" }
}
},
],
{
multi: true,
new : true 
})

最新更新