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

如何计算具有相同值的文档数量,并使用mongoDB中的另一个字段对它们进行分组?,mongodb,mongodb-query,pymongo,Mongodb,Mongodb Query,Pymongo,假设我没有像这样的文档 { "_id" : ObjectId("5ecce1f9cb4a5d097c9061c8"), "job_id" : 1, "score" : 2 }, { "_id" : ObjectId("5ecce200cb4a5d097c9061cb"), "job_id" : 1, "score" : 1 }, { "_id" : ObjectId("5ecce206cb4a5d097c9061ce"), "job

假设我没有像这样的文档

{
    "_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
}
如何根据他们的工作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次,因此得到了这个结果


我尝试了许多不同的方法并尝试进行分组,但没有起到任何作用。

如果您使用的是Mongo 4.0+版,您可以使用下面的聚合来操作数据结构。我们需要Mongo版本4.0的原因是,由于对象键的限制,在管道中使用必须是类型化字符串,才能使
$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"} 
        }
    }
])
在较旧的Mongo版本上,您必须进行最终的结构转换,该转换将由代码中的
$arrayToObject
完成,或者更改所需的输出格式,使其成为一个可行的结构,以便通过该Mongo版本的可用命令获得