如何在MongoDB中基于其他属性更新球队的DIFF属性?
更新MongoDB集合中球队的DIFF属性
针对你的需求,用MongoDB 4.2+支持的聚合管道更新就能实现,不需要复杂的聚合操作,直接用updateMany结合几个简单的操作符即可:
完整更新命令
把下面的yourCollectionName替换成你的实际集合名称:
db.yourCollectionName.updateMany( {}, // 匹配所有文档,如需指定分组可修改,比如 {pool: 'A'} 只更新A组 [ { $set: { teams: { $map: { input: "$teams", as: "team", in: { $mergeObjects: [ "$$team", { DIFF: { $subtract: ["$$team.PointsFor", "$$team.PointsAgainst"] } } ] } } } } } ] )
逐部分解释
updateMany({}, [...]):第一个空对象表示匹配集合中所有文档,如果只想更新特定分组(比如B组),改成{pool: 'B'}即可;如果要更新单条文档,换成updateOne,匹配条件设为{id: 1}这样的唯一标识。$set:用于修改文档中的字段值,这里我们要重新生成teams数组。$map:遍历原teams数组,对每个球队对象(用$$team指代)做处理。$mergeObjects:把原球队的所有属性(比如name、wins等)和新计算的DIFF合并,避免丢失原有数据。$subtract:执行减法运算,用当前球队的PointsFor减去PointsAgainst,结果赋值给DIFF字段。
验证操作
执行更新后,可以用以下命令验证结果:
db.yourCollectionName.find({}, {pool: 1, teams: {name: 1, DIFF: 1}})
内容的提问来源于stack exchange,提问作者alphare
相关产品推荐
相关产品推荐

