我需要对对象中的数组进行分组和计数。 我尝试了很多东西,但都无法解决。
我有一个这样的 mongodb 文档:
[
{
"id" : 1,
"name" : "A",
"connected" : [
{
"iid" : 1,
"risk" : "high"
},
{
"iid" : 2,
"risk" : "high"
},
{
"iid" : 3,
"risk" : "low"
}
]
},
{
"id" : 2,
"name" : "B",
"connected" : [
{
"iid" : 4,
"risk" : "medium"
},
{
"iid" : 5,
"risk" : "medium"
},
{
"iid" : 6,
"risk" : "low"
}
]
},
{
"id":3,
"name":"C"
}
]
我想要一个给我这样结果的查询:
[
{
"id":1,
"name":"A",
"count": {
"high" : 2,
"low" : 1
}
},
{
"id":2,
"name":"B",
"count": {
"medium" : 2,
"low" : 1
}
},
{
"id":3,
"name":"C"
}
]
我在“$addFields”聚合查询中尝试了“$group”,但除了“$group”之外它没有。
答案 0 :(得分:1)
您可以在聚合管道中执行以下操作:
$unwind
connected
数组$group
通过 id
和 connected.risk
获取计数$group
by id
将结果放入 {k: , v: }$arrayToObject
取回您想要的表单这是 Mongo playground 供您参考。
答案 1 :(得分:0)
感谢@ray,我找到了解决方案并添加了一些自定义选项,例如;
connected
对象total
字段中添加 count
计数。如果有人需要帮助解决这些问题,可以查看此参考:
https://mongoplayground.net/p/gRIOVj4A8Bh
结果是这样的:
[
{
"id": 1,
"name": "A",
"connected": [
{
"iid": 1,
"risk": "high"
},
{
"iid": 2,
"risk": "high"
},
{
"iid": 3,
"risk": "low"
}
],
"count": {
"high": 2,
"low": 1,
"total": 3
}
},
{
"id": 2,
"name": "B",
"connected": [
{
"iid": 4,
"risk": "medium"
},
{
"iid": 5,
"risk": "medium"
},
{
"iid": 6,
"risk": "low"
}
],
"count": {
"low": 1,
"medium": 2,
"total": 3
}
},
{
"id": 3,
"name": "C",
"count": {
"total": 0
}
}
]
如果不需要 connected
对象,可以在查询结束时将其添加到 $unset
列表中。