mongoDB数据分组聚合问题

MongoDB有类似这么一串数据

{
    id: '123',
    count: 10
},
{
    id: '124',
    count: 1
},
{
    id: '125',
    count: 2
},
{
    id: '126',
    count: 5
},
{
    id: '127',
    count: 8
}

怎么能够一次性聚合出count≤3的数量,3<count≤5的数量,5<count≤8的数量,8<count的数量?

阅读 2.1k
1 个回答

$facet可以满足你的需求。注意boundaries是包含低边界,不包含高边界的,跟你的要求不太一样,所以我做了下调整:

db.bar.aggregate([{
    $facet: {
        countByCount: [{
            $bucket: {
                groupBy: "$count",
                boundaries: [0, 4, 6, 9],
                default: "Other",
                output: {
                    count: {$sum: 1}
                }
            }
        }]
    }
}])

结果:

{ "countByCount" : [ { "_id" : 0, "count" : 2 }, { "_id" : 4, "count" : 1 }, { "_id" : 6, "count" : 1 }, { "_id" : "Other", "count" : 1 } ] }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进