You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Mongoose计算每个模型文档中关联votes的score总和

问题原因

你当前主集合的votes字段存储的是投票文档的ObjectId引用,并非内嵌的完整投票对象,直接在聚合中访问$$this.score时,$$this本身是ID值,不存在score属性,所以返回null。

解决方案

需要先通过$lookup关联投票集合,将ID数组填充为完整的投票文档数组,再进行分数累加计算,完整聚合语句如下:

MyModel.aggregate([
  // 第一步:关联投票集合,填充votes数组为完整文档
  {
    $lookup: {
      from: "votes", // 投票集合的实际名称,对应Vote模型的集合名
      localField: "votes",
      foreignField: "_id",
      as: "votes"
    }
  },
  // 第二步:计算累加得分
  {
    $addFields: {
      scoreSum: {
        $sum: "$votes.score" // 直接对votes数组下所有score字段求和,比$reduce写法更简洁
      }
    }
  },
  // 可选:如果要和预期输出结构完全一致,去掉votes字段、保留原有其他字段
  {
    $project: {
      votes: 0
    }
  }
])

补充说明

上述方案完全在数据库层面完成计算,不需要额外的JavaScript处理。如果你在Mongoose模型中为votes字段配置了ref: "Vote"关联,也可以结合虚拟字段实现相同效果,但聚合方案的执行效率更高。

内容的提问来源于stack exchange,提问作者Anton Kalik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:04