如何解决使用mongoDB聚合查找百分比
我有2个文件的集合。每个文档都有bank []数组,其中包含对象。
共有3家银行:ABC,PQR,XYZ。
对于文档1
banks[{name:"PQR",pdf:true,amt: 500},{name:"ABC",amt:300}]
对于文档2
banks[{name:"XYZ",amt:450},{name:"PQR",amt:200},amt:600}]
我正在尝试为其中具有pdf值的true的每个银行查找百分比。
考虑银行ABC
总发生次数:2
使用“ pdf:true”键的次数:1
百分比:50
我想要这样的结果
{name:"ABC",percentage: 50}
类似地,我想找到剩余的银行。 如何进行汇总。请帮忙 预先感谢。
解决方法
-
我从$unwind开始平整
banks
数组 -
然后使用$facet进行并行分组。
创建了两个组:
-
pdfTrue
,其中每个银行名称带有pdf=true
的文档数。 -
total
,其中包含每个银行名称的文档总数。
-
-
然后将
pdfTrue
和total
数组连接起来并根据银行名称分组后找到百分比。
您可以使用以下方法实现用例:
db.collection.aggregate([
{
$unwind: "$banks"
},{
"$facet": {
"pdfTrue": [
{
$group: {
_id: "$banks.name",count: {
$sum: {
$cond: [
{
$eq: [
"$banks.pdf",true
]
},1,0
]
}
},}
}
],"total": [
{
$group: {
_id: "$banks.name",count: {
"$sum": 1
}
}
},{
$project: {
total: "$count"
}
}
]
}
},{
$project: {
concat: {
$concatArrays: [
"$total","$pdfTrue"
]
}
}
},{
$unwind: "$concat"
},{
$group: {
_id: "$concat._id",values: {
$mergeObjects: {
count: "$concat.count",total: "$concat.total",}
}
}
},{
$project: {
"_id": 0,"name": "$_id","percentage": {
$multiply: [
{
$divide: [
"$values.count","$values.total"
]
},100
]
}
}
}
])
在此处查看输出:MongoDB Playground
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。