[英]MongoDB Query to Show only data with greater than average
演示https://mongoplayground.net/p/ImiJWm1s-lx
db={
BRANCH: [
{
"BCODE": "B1",
"BNAME": "CANADA"
},
{
"BCODE": "B2",
"BNAME": "USA"
},
{
"BCODE": "B3",
"BNAME": "CANADA"
}
],
ACCOUNT: [
{
"ANO": 1,
"Amount": 1000,
"BCODE": "B1"
},
{
"ANO": 2,
"Amount": 350,
"BCODE": "B1"
},
{
"ANO": 3,
"Amount": 450,
"BCODE": "B1"
},
{
"ANO": 4,
"Amount": 360,
"BCODE": "B2"
},
{
"ANO": 5,
"Amount": 800,
"BCODE": "B2"
},
{
"ANO": 6,
"Amount": 450,
"BCODE": "B3"
},
{
"ANO": 7,
"Amount": 360,
"BCODE": "B2"
},
{
"ANO": 8,
"Amount": 800,
"BCODE": "B1"
}
]
}
我有這個 MongoDB 集合。 我可以使用此查詢在每個分支中顯示沒有帳戶:
db.BRANCH.aggregate([
{
$lookup: {
from: "ACCOUNT",
localField: "BCODE",
foreignField: "BCODE",
as: "TOTAL_ACCOUNTS"
}
},
{
"$addFields": {
"TOTAL ACCOUNTS": {
$size: "$TOTAL_ACCOUNTS"
}
}
},
{
"$project": {
_id: 0,
TOTAL_ACCOUNTS: 0
}
}
])
輸出
[
{
"BCODE": "B1",
"BNAME": "CANADA",
"TOTAL ACCOUNTS": 4
},
{
"BCODE": "B2",
"BNAME": "USA",
"TOTAL ACCOUNTS": 3
},
{
"BCODE": "B3",
"BNAME": "CANADA",
"TOTAL ACCOUNTS": 1
}
]
但我只需要顯示那些賬戶數量超過所有分支機構平均賬戶數量的分支機構詳細信息。
所以根據給定的數據,所有分行的 AVG Accounts 是 (4+3+1)/3 = 2
這意味着只應顯示 Branch B1 和 Branch B2,因為它們分別有 4 個帳戶和 3 個帳戶。
不應顯示分支 B3,因為它只有 1 個帳戶 & 1<2(帳戶的平均數)。
我應該在這里使用什么?
$group
by null 並構造branches
數組並獲得帳戶總大小的平均值$filter
迭代branches
數組的循環並檢查總數應大於帳戶總大小的平均值的條件db.BRANCH.aggregate([
{
$lookup: {
from: "ACCOUNT",
localField: "BCODE",
foreignField: "BCODE",
as: "TOTAL_ACCOUNTS"
}
},
{ $addFields: { TOTAL_ACCOUNTS: { $size: "$TOTAL_ACCOUNTS" } } },
{
$group: {
_id: null,
branches: { $push: "$$ROOT" },
totalAvg: { $avg: "$TOTAL_ACCOUNTS" }
}
},
{
$project: {
_id: 0,
branches: {
$filter: {
input: "$branches",
cond: { $gt: ["$$this.TOTAL_ACCOUNTS", "$totalAvg"] }
}
}
}
}
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.