代码之家  ›  专栏  ›  技术社区  ›  Brandon Taylor

如何使用MongoDB聚合获得总和?

  •  0
  • Brandon Taylor  · 技术社区  · 5 年前

    totalHoursForYear

    const byYear = await this.workHistoryModel.aggregate([
      {
        $group: {
          _id: '$year',
          history: {
            $push: '$$ROOT'
          },
          totalHoursForYear: {
            $sum: {
              $add: [
                { $multiply: ['$eightHourDays', 8] },
                { $multiply: ['$tenHourDays', 10] },
                { $multiply: ['$twelveHourDays', 12] },
              ]
            }
          },
        }
      },
    ]);
    

    现在我需要得到 全年总小时数 得到所有年份的总数。这可能吗?我好像语法不对。当我尝试添加另一个总和时:

    $group: {
      ...,
      totalHours: {
        $sum: {
          $add: '$totalHoursForYear'
        },
        $push: '$$ROOT'
      }
    }
    

    我得到一个错误:“字段'totalHours'必须指定一个累加器”

    0 回复  |  直到 5 年前
        1
  •  2
  •   varman    5 年前

    当你需要总金额时,你可以再做一次 $group 具有 _id:null 这意味着要考虑所有的文件

    {
        $group: {
          _id: null,
          data: {
            $push: "$$ROOT"
          },
          total: {
            $sum: "$totalHoursForYear"
          }
        }
      },
      {
        "$unwind": "$data"
      },
      {
        "$addFields": {
          _id: "$data._id",
          history: "$data.history",
          totalHoursForYear: "$data.totalHoursForYear",
          _id: "$$REMOVE",
          data: "$$REMOVE"
        }
      }
    

    工作 Mongo playground