我如何计算具有相同值的文档数量,并使用mongoDB中的另一个字段将它们分组?

问题描述 投票:1回答:1

假设我的文件很少

{
    "_id" : ObjectId("5ecce1f9cb4a5d097c9061c8"),
    "job_id" : 1,
    "score" : 2
},
{
    "_id" : ObjectId("5ecce200cb4a5d097c9061cb"),
    "job_id" : 1,
    "score" : 1
},
{
    "_id" : ObjectId("5ecce206cb4a5d097c9061ce"),
    "job_id" : 1,
    "score" : 2
},
{
    "_id" : ObjectId("5ecce210cb4a5d097c9061d3"),
    "job_id" : 1,
    "score" : 0
},
{
    "_id" : ObjectId("5ecce21acb4a5d097c9061d6"),
    "job_id" : 2,
    "score" : 2
},
{
    "_id" : ObjectId("5ecce224cb4a5d097c9061df"),
    "job_id" : 2,
    "score" : 0
},
{
    "_id" : ObjectId("5ecce230cb4a5d097c9061e2"),
    "job_id" : 2,
    "score" : 0
},
{
    "_id" : ObjectId("5ecce239cb4a5d097c9061e5"),
    "job_id" : 2,
    "score" : 0
}

我如何根据他们的job_id对他们进行分组,并获得出现分数的汇总结果?像这样:

{
    "job_id": 1,
    "result": {
        0:1,
        1:1,
        2:2
    }
},
{
    "job_id": 2,
    "result": {
        0:3,
        2:1
    }
}

由于job_id 2,O发生3次,2发生1次,因此,此结果。

我尝试了许多不同的方法并尝试进行分组,但没有帮助。

mongodb mongodb-query pymongo
1个回答
0
投票

[如果您使用的是Mongo 4.0+,则可以使用以下聚合,该聚合利用$arrayToObject来操纵数据结构。我们需要Mongo版本4.0的原因是管道中$toString的使用,因为对象键的限制必须键入字符串才能使$arrayToObject正常工作。

db.collection.aggregate([
    {
        $group: {
            _id: {job: "$job_id", score: "$score"},
            count: {$sum: 1}
        }
    },
    {
        $group: {
            _id: "$_id.job",
            scoreResults: {$push: {v: "$count", k: {$toString: "$_id.score"}}}
        }
    },
    {
        $project: {
            _id: 0,
            job_id: "$_id",
            result: {$arrayToObject: "$scoreResults"}

        }
    }
])
© www.soinside.com 2019 - 2024. All rights reserved.