mongodb如何实现引用其他字段进行计算?

 0 0条评论

假设有表有以下三个字段,均是number类型

num1,num2,num3

我想通过update语句计算,伪代码如下:

selet table set num3=num1+num2

在实际项目运用场景,考试系统,每道题有答对次数和答错次数,我需要进行正确率统计。

即 num3=num1/(num1+num2)。

网上搜索大量代码,都无法实现,如以下代码

Model.updateMany({ accuracy: { '$add': ['$right','$wrong']}})

因为add函数只能使用在,aggregate聚合中。也就是说我可以通过聚合查询,然后计算出正确率统计,也就是说数据库并不存在此字段,仅仅是通过查询结果后再生成,经过我再三考虑。因为我还需要对正确率进行后续操作,如排序、图表生成等,如果每次都要计算生成,那么开销太大了,所以还是要设置一个字段,每次更新答对次数和答错次数时,进行更新正确率。

那么目前看来只能用到mongodb的foreach函数了,代码如下。


async incRight(IDs: string[]) {
    return (await Model.find({ _id: { $in: IDs } })).forEach(async (item) => {
        await Model.updateOne({ _id: item._id }, { '$inc': { 'right': 1 }, accuracy: ((item.right! + 1) / (item.wrong! + item.right! + 1)).toFixed(4) })
     })
}

这样做的话,当find中的数据比较大的话,性能可能会产生问题,所以请大家自行斟酌。

本文作者:双黑

版权声明:本站文章欢迎链接分享,禁止全文转载!

游客