Создание этапа агрегации для общего количества открытых транзакций в коллекции MongoDB - PullRequest
0 голосов
/ 27 апреля 2018

Один из шагов, которые я использую в своем конвейере агрегации MongoDB, выглядит следующим образом:

{
  $group: {
    "_id": "$customer._id",
    "totalBalance": {
      "$sum": "$transactions.amounts.balance"
    }
  }
}

Это работает, как ожидалось. Он суммирует числовые значения для transactions.amounts.balance и дает мне общую сумму в долларах.

В дополнение к этому я хотел бы определить, сколько транзакций используется для определения этого числа (т. Е. Определить, сколько записей существует для данного customer_id, где transactions.amount.balance > 0.

Я пытался сделать это:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": { "$transactions.amounts.balance" : $gt: 0 }
    }
  }
}

Выше не сработало. Поэтому я также попытался использовать массив, например:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": {
      "$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
    }
  }
}

Также не работает.

Может ли $sum использоваться таким образом? Или мне нужно по-другому подходить к этой конкретной стадии агрегации?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете использовать $ cond внутри $sum, чтобы сделать это:

{
  $group: {
    "_id": "$customer._id",
    "totalOpenTransactions": { $sum: { $cond: { if: { $gt: ["$transactions.amounts.balance", 0] }, then: 1, else: 0 } } }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...