Было бы легче помочь, если бы вы предоставили схему документа и агрегацию, которую вы используете, поскольку мы могли бы сделать это «динамически» на протяжении всего процесса.
С учетом сказанного мы можем простодобавьте 2 шага в конец вашей текущей агрегации.
Сначала (при условии, что ваши результаты не находятся в массиве), мы сгруппируем их, чтобы мы могли перебрать массив:
{
$group: {
_id: null,
temp: {$push: "$$ROOT"}
}
},
{
"$project" : {
_id: 0,
"temp_field" : {
"$reduce" : {
"input" : "$temp",
"initialValue" : {
"prev" : 0.0,
"results" : []
},
"in" : {
"prev" : "$$this.count",
"results" : {
"$concatArrays" : ["$$value.results",
[
{
"month" : "$$this.month",
"_id" : "$$this._id"
"count" : "$$this.count",
"diff" : {
"$subtract" : [
"$$this.count",
"$$value.prev"
]
}
}
]
]
}
}
}
}
}
},
Наконец, нам просто нужно «восстановить» старый формат результата:
{
$unwind: "$temp_field"
},
{
$project: {
_id: "$temp_field.results._id",
count: "$temp_field.results.count",
month: "$temp_field.results.month",
difference: "$temp_field.results.diff"
}
}
*** Примечание. На самом деле я неправильно вычисляю разницу (сопоставить месяц с предыдущим месяцем по значению), то есть еслиу вас есть пропущенные месяцы, вы должны позаботиться об этом заранее.а также сортировать массив по дате заранее, так как я просто использую предыдущий массив для выполнения вычитания.