我需要在一个对象中对数组进行分组和计数。我试过很多方法,但都没有解决办法。
我有一个这样的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”。
2条答案
按热度按时间jucafojl1#
您可以在聚合管道中执行以下操作:
$unwind
connected
阵列$group
乘以id
和connected.risk
以获得计数$group
乘id
将结果放入{k:,v:}1.使用
$arrayToObject
获取所需的表单这里是Mongo playground供您参考。
ia2d9nvy2#
感谢@ray,我已经找到了解决方案,并添加了一些自定义选项,如;
connected
对象count
字段中添加total
计数。如果有人需要帮助解决这些问题,可以查看此参考:
https://mongoplayground.net/p/gRIOVj4A8Bh
结果是这样的:
如果
connected
对象不需要,可以在查询结束时将其添加到$unset
列表中。