У меня есть сбор платежей (таблица), и данные основаны на платежах филиалов ..
данные филиалов имеются в коллекциях филиалов.
Пример данных в коллекциях платежей:
[
{
"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,
}
]
Я пытаюсь получить данные на основе следующих условий:
- сгруппировать по BranchId,
- Общая сумма
- Общая полученная сумма,
- общая Пользователи
- Общее количество платных пользователей.
- информация о филиале
мой запрос:
> 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'}
]
Вопросы, как получить счетчик только для платного статуса и присоединиться к таблицам филиалов, чтобы получить имя филиала.