使用 mongoDB 聚合查找百分比
Finding percentage using mongoDB aggregation
我收集了 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 值为 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
我收集了 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 值为 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