如何计算具有相同值的文档数量,并使用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版本的可用命令获得