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

如何在 mongo DB 中使用聚合进行多层计数细分?

如何在 mongo DB 中使用聚合进行多层计数细分?

侃侃尔雅 2022-06-05 10:55:16
我有以下结构的文档。{  name: "John Doe",  City : "OK",  Prepaid: "Y"},{  name: "Jane Doe",  City : "CA",  Prepaid: "N"},{  name: "Jule Doe",  City : "OK",  Prepaid: "N"},{  name: "Jake Doe",  City : "OK",  Prepaid: "Y"}我想先根据城市对它进行分组,然后再对预付费进行分组,并获得每种预付费类型的单独计数。看起来与此类似的东西。{  City : OK  Count : {    "filter": prepaid,    "count": {      Y : 2      N: 1    }  }}{  City : CA  Count : {    "filter": prepaid,    "count": {      Y : 0      N: 1    }  }}我尝试基于多个字段进行聚合,它给了我文档的总数而不是故障。这是我为聚合管道尝试的内容:db.collection.aggregate([    {$match:matchquery    },{$group:{_id:{city: '$city', prepaid: '$prepaid' }, count:{$sum:1}    }}])
查看完整描述

1 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您可以运行$group两次以prepaid首先计数,然后您可以应用$arrayToObject来获取Y/N对象键:


db.collection.aggregate([

    {

        $group: {

            _id: { city: "$City", prepaid: "$Prepaid" },

            total: { $sum: 1 }

        }

    },

    {

        $grop: {

            _id: "$_id.city",

            Count: {

                $push: {

                    k: "$_id.prepaid", v: "$total"

                }

            }

        }

    },

    {

        $project: {

            _id: 0,

            city: "$_id",

            Count: { $mergeObjects: [ { filter: "prepaid" }, { count: { $arrayToObject: "$Count" } } ] }

        }

    }

])


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 169 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号