如何使用另一个集合中的信息过滤MongoDB集合?

时间:2020-04-21 07:55:52

标签: mongodb mongodb-query aggregation-framework

我有两个收藏集AccountsDebts。我需要获取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
}

1 个答案:

答案 0 :(得分:1)

您可以先从Accounts集合中找到帐号,然后将$inDebits集合一起使用

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" }]
    }
  }}
])
相关问题