MongoDB + запрос на присоединение, группировка по количеству - PullRequest
2 голосов
/ 23 марта 2020

У меня есть сбор платежей (таблица), и данные основаны на платежах филиалов ..

данные филиалов имеются в коллекциях филиалов.

Пример данных в коллекциях платежей:

[
  {
    "amount" : 1000,
    "paymentStatus" : "Unpaid",
    "branchId" : ObjectId("5b320de5a79ae855912eb332"),
    "userId" : ObjectId("5b320de5a79ae855912eb333"),
    "receivedAmount" : 500,
  },
  {
    "amount" : 5000,
    "paymentStatus" : "paid",
    "branchId" : ObjectId("5b320de5a79ae855912e3335"),
    "userId" : ObjectId("5b320de5a79443855912eb332"),
    "receivedAmount" : 5000,
  },
  {
    "amount" : 2000,
    "paymentStatus" : "paid",
    "branchId" : ObjectId("5b320de5a79ae855912eb338"),
    "userId" : ObjectId("5b320de5a79ae855912eb432"),
    "receivedAmount" : 2000,
  }
]

Я пытаюсь получить данные на основе следующих условий:

  1. сгруппировать по BranchId,
  2. Общая сумма
  3. Общая полученная сумма,
  4. общая Пользователи
  5. Общее количество платных пользователей.
  6. информация о филиале

мой запрос:

> db.payments.aggregate([ { $group: { _id : { branchId : '$branchId'}, amount: {$sum: '$amount'}, receivedAmount : {$sum : '$receivedAmount'}, totalStudents: {$sum :1} }}])

текущий вывод:

[{ "_id" : { "branchId" : ObjectId("5b320de5a79ae855912eb377") }, "amount" : 65148, "receivedAmount" : 13276, "totalStudents" : 33 }
{ "_id" : { "branchId" : ObjectId("5a992ae104329d5359be6980") }, "amount" : 9440, "receivedAmount" : 0, "totalStudents" : 4 }
]

ожидаемый результат:

[{ "branchId" : ObjectId("5b320de5a79ae855912eb377") , "amount" : 65148, "receivedAmount" : 13276, "totalStudents" : 33, "paidStudents": 2 , "branchName": 'abcd'}
{ "_id" : { "branchId" : ObjectId("5a992ae104329d5359be6980") , "amount" : 9440, "receivedAmount" : 0, "totalStudents" : 4, "paidStudents": 2 , "branchName": 'xyz'}
]

Вопросы, как получить счетчик только для платного статуса и присоединиться к таблицам филиалов, чтобы получить имя филиала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...