Как отфильтровать коллекцию MongoDB, используя информацию из другой коллекции? - PullRequest
2 голосов
/ 21 апреля 2020

У меня есть две коллекции Accounts и Debts. Мне нужно получить предметы из коллекции Accounts, у которых "экономия net" больше определенного числа. Net экономия - это экономия после вычета всех долгов из сбережений на Счете. Любые указания о том, как решить эту проблему, были бы очень полезны.

Коллекция счетов:

{

  "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"
}

Счета с Net Сбережения> 500

{
  "AccountNumber": "A1234",
  "NetSavings": 970
}

1 Ответ

1 голос
/ 21 апреля 2020

Сначала вы можете найти номера счетов из 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" }]
    }
  }}
])
...