Me gustaría obtener el total (suma) del valor totalHoursForYear . Aquí está mi agregación actual:
const byYear = await this.workHistoryModel.aggregate([ { $group: { _id: '$year', history: { $push: '$$ROOT' }, totalHoursForYear: { $sum: { $add: [ { $multiply: ['$eightHourDays', 8] }, { $multiply: ['$tenHourDays', 10] }, { $multiply: ['$twelveHourDays', 12] }, ] } }, } }, ]); Ahora necesito obtener una suma de totalHoursForYear para obtener el total de todos los años. es posible? Parece que no puedo obtener la sintaxis correcta. Cuando intento agregar otra suma:
$group: { ..., totalHours: { $sum: { $add: '$totalHoursForYear' }, $push: '$$ROOT' } }Recibo un error: "El campo 'totalHours' debe especificar un acumulador"
Cuando necesite la suma total, puede hacer otro $group con _id:null , lo que significa considerar todos los documentos
Con su script, agregue lo siguiente para obtener el total y obtener la misma estructura.
{ $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" } }