mongoose中统计最大数$max

 0 0条评论

scheme部分结构如下:

    torf:{ // 判断题数量和得分,必须有count和score两个属性
        type:{count:Number,score:Number,_id: false },
        required:true
    },

    single:{ // 单选题数量
        type:{count:Number,score:Number,_id: false },
        required:true
    },

    multiple:{ // 多选题数量
        type:{count:Number,score:Number,_id: false },
        required:true
    }

这三个属性都是对象,我需要统计某一个对象中,count属性最高的数字也就是max值。

这里就要到聚合函数了,个人感觉mongodb的聚合函数,跟sql比起来复杂多了,看了多少遍文档还是没有完全能理解,只能不断尝试语句,才能最终得到需要的数据。

话不多说,代码如下:

    /**
    * 获得指定分类下,指定题型数量的最大值
    */
    getMaxByCatalog(catalog: string, type: TQABankType) {
        return Model.aggregate<{ _id: TQABankType, max: number }>().match({ catalog })
            .group({ _id: type, max: { $max: `$${type}.count` } })
    }

由于是ts写的,参数定义了类型,aggretate里传了一个泛型,js的话直接忽略。

简单说一下,match是匹配数据,只有满足的条件才会进入下一步。

至于group之后的_id,我个人也不是很明白,必须得写,不写报错,而且还必须是"_id",之后的$max对象,就是你需要查询的属性,如果是对象,也可以传入子属性。

我这里用了一个字符串拼接,实际就是查找{$max:'$torf.count'}。

最终得到的结果就是这样,是一个数组。

[ { _id: 'single', max: 5 } ]

好了,至此就能在mongoose中,实现最大值的查找了,最小值也一样max换成min即可。

本文作者:双黑

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

游客