我有2个文件的集合。每个文档都有bank []数组,其中包含对象。
有3家银行:ABC,PQR,XYZ。
对于文件1
banks[{name:"PQR", pdf:true, amt: 500}, {name:"ABC", amt:300}]
对于文件2
banks[{name:"XYZ", pdf:true, amt:450}, {name:"PQR", amt:200}, {name:"ABC",pdf:true, amt:600}]
我正在尝试为每个具有pdf值真实的银行找到百分比。
考虑银行ABC
总发生次数:2
使用“ pdf:true”键的次数:1
百分比:50
我想要这样的结果
{name:"ABC", percentage: 50}
同样,我想找到剩余的银行。如何进行汇总。请提前帮助。
我从$ unwind开始展平banks
数组
然后使用$ facet进行并行分组。
创建了两个组:
pdfTrue
其中包含pdf=true
每个银行名称的文件数量。total
其中包含每个银行名称的文件总数。然后,将pdfTrue
andtotal
数组同时连接并根据银行名称分组后找到百分比。
您可以使用以下方法实现用例:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句