Mongodb 删除模型上的最后一个实例时聚合函数不工作

Mongodb 删除模型上的最后一个实例时聚合函数不工作,mongodb,mongodb-query,mongoose-schema,Mongodb,Mongodb Query,Mongoose Schema,我有一个聚合函数,它在“一对多”db关系中的“一”上提供顶级数组结果。它汇总了所有相关“许多”文件的各个年份 它工作得很好,除非所有属于那个特定“一”的实例都被删除了——尽管这些实例确实被删除了,但我的聚合函数仍然像最后一个实例存在一样工作 这是我的职责: outputSchema.statics.calcSumYears = async function (projectId) { const stats = await this.aggregate([ { $matc

我有一个聚合函数,它在“一对多”db关系中的“一”上提供顶级数组结果。它汇总了所有相关“许多”文件的各个年份

它工作得很好,除非所有属于那个特定“一”的实例都被删除了——尽管这些实例确实被删除了,但我的聚合函数仍然像最后一个实例存在一样工作

这是我的职责:

outputSchema.statics.calcSumYears = async function (projectId) {
const stats = await this.aggregate([
    {
        $match: { project: projectId }
    },
    {
        $group: {
            _id: '$project',
            year1: { $sum: { $arrayElemAt: ['$afterActivity', 0] } },
            year2: { $sum: { $arrayElemAt: ['$afterActivity', 1] } },
            year3: { $sum: { $arrayElemAt: ['$afterActivity', 2] } }
        }
    }
])
let outputYearsTotal = [stats[0].year1, stats[0].year2, stats[0].year3]

if (stats.length > 0) {
    await Project.findByIdAndUpdate(projectId, {
        $set: {
            outputYearsTotal: outputYearsTotal
        }
    })
} else if (stats.length === 0) {
    await Project.findByIdAndUpdate(projectId, {
        $set: {
            outputYearsTotal: [0, 0, 0]
        }
    })
}
}
在到达最后一个实例之前,我可以毫无问题地删除实例,当我删除该实例时,查询返回“无法读取未定义的属性‘year1’”,这很有意义,因为聚合函数没有可操作的实例

如上面的代码所示,如果'stats'变量长度为0,我尝试通过添加一个零数组来重置该值,但是这不起作用


我想我已经看得太久了,基本上我想做的就是确保如果这个模型的最后一个实例匹配的查询ie属于该projectId被删除,我的FindByAndUpdate查询中的“outputYearsTotal”数组被重置为0

add$存在于初始匹配中。因此,它也只查看字段存在的文档,这意味着当没有文档时,它将为0,这是一个合法值,而不是抛出错误