我有两个收藏集Accounts
和Debts
。我需要获取Accounts
集合中的“净节省”大于一定数量的项目。净储蓄是从帐户储蓄中减去所有债务后的储蓄。有关如何解决此问题的任何指示都将非常有帮助。
帐户收集:
{
"AccountNumber": "A1234",
"Savings": 1000
}
{
"AccountNumber": "A4567",
"Savings": 500
}
收债:
{
"AccountNumber": "A1234",
"Debt": 10,
"Lender": "A"
}
{
"AccountNumber": "A1234",
"Debt": 20,
"Lender": "B"
}
{
"AccountNumber": "A4567",
"Debt": 50,
"Lender": "B"
}
净储蓄> 500的帐户
{
"AccountNumber": "A1234",
"NetSavings": 970
}
答案 0 :(得分:1)
您可以先从Accounts
集合中找到帐号,然后将$in
与Debits
集合一起使用
const accountNumbers = (await Account.find({ Savings: { $gte: 500 }})).map(({ AccountNumber }) => AccountNumber)
const debits = await Debits.find({ AccountNumber: { $in: accountNumbers }})
或使用汇总
Accounts.aggregte([
{ $lookup: {
from: "debits",
localField: "AccountNumber",
foreignField: "AccountNumber",
as: "acc"
}},
{ $addFields: {
NetSavings: {
$subtract: ["$Savings", { $sum: "$acc.Debt" }]
}
}}
])