为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB SELECT COUNT GROUP BY

/ 猿问

MongoDB SELECT COUNT GROUP BY

PIPIONE 2019-09-20 17:18:03

我正在玩MongoDB试图弄清楚如何做一个简单的事情


SELECT province, COUNT(*) FROM contest GROUP BY province

但我似乎无法使用聚合函数来解决它。我可以使用一些非常奇怪的组语法来做到这一点


db.user.group({

    "key": {

        "province": true

    },

    "initial": {

        "count": 0

    },

    "reduce": function(obj, prev) {

        if (true != null) if (true instanceof Array) prev.count += true.length;

        else prev.count++;

    }

});

但是使用聚合函数有更简单/更快的方法吗?



查看完整描述

3 回答

?
精慕HU

这将是使用aggregate以下方法更简单的方法:


db.contest.aggregate([

    {"$group" : {_id:"$province", count:{$sum:1}}}

])


查看完整回答
反对 回复 2019-09-20
?
胡子哥哥

如果需要多个列进行分组,请遵循此模型。在这里,我通过进行计数status和type:


  db.BusinessProcess.aggregate({

    "$group": {

        _id: {

            status: "$status",

            type: "$type"

        },

        count: {

            $sum: 1

        }

    }

   })


查看完整回答
反对 回复 2019-09-20
?
开满天机

我需要一些基于聚合函数结果的额外操作。最后,我找到了一些基于MongoDB结果的聚合函数和操作的解决方案。我收藏Request了一个字段request, source, status, requestDate。


单场组By&Count:


db.Request.aggregate([

    {"$group" : {_id:"$source", count:{$sum:1}}}

])

多个字段分组依据和计数:


db.Request.aggregate([

    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}}

])

多个字段分组依据和计数使用字段排序:


db.Request.aggregate([

    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},

    {$sort:{"_id.source":1}}

])

多个字段按&计数使用排序使用计数:


db.Request.aggregate([

    {"$group" : {_id:{source:"$source",status:"$status"}, count:{$sum:1}}},

    {$sort:{"count":-1}}

])


查看完整回答
反对 回复 2019-09-20

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信