簡體   English   中英

如何使用 MongoDB 聚合獲得總和?

[英]How can I get a sum of sums using MongoDB aggregation?

我想獲得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] },
          ]
        }
      },
    }
  },
]);

現在我需要得到totalHoursForYear的總和才能得到所有年份的總數。 這可能嗎? 我似乎無法使語法正確。 當我嘗試添加另一個總和時:

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

我收到一個錯誤:“字段 'totalHours' 必須指定一個累加器”

當您需要總和時,您可以使用_id:null執行另一個$group ,這意味着考慮所有文檔

使用您的腳本,添加以下內容以獲得總數並獲得相同的結構。

{
    $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"
    }
  }

工作蒙戈游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM