У меня от 3 до 4 коллекций
- пользователей
- платежей
- филиалов
- оценок
В Таблица пользователей У нас есть несколько типов пользователей, таких как ученик, родители, как это.
В таблице платежей данные о платежах пользователей содержат данные о платежах с частичной или полной суммой.
В филиалах таблица содержит данные о филиалах. .
Я пытаюсь найти отчеты на основе филиалов и оценок.
- общее количество пользователей в этом филиале
- общее количество платных пользователей в этом филиале. на основе столбца paidStatus.
- общая сумма, полученная в этом филиале на основе столбца receiveAmount (сумма)
- общая группа баланса по пользователю и branchId
- имя филиала.
Пример таблицы пользователей:
[
{
"_id": "5b372ea5b0103b4ab2409ea6",
"name" : "User 1",
"role" : "student",
"enrollmentCode": "X1",
"branchId": "5b36388c7e50f13e845346e2",
"classId" : "5b36388c7e50f13e84534343"
},
{
"_id": "5b372ea5b0103b4ab2409ea7",
"name" : "User 2",
"role" : "student",
"enrollmentCode": "X2",
"branchId": "5b36388c7e50f13e845346e2",
"classId" : "5b36388c7e50f13e8453433d"
},
{
"_id": "5b372ea5b0103b4ab2409ea9",
"name" : "User 3",
"role" : "student",
"enrollmentCode": "X3",
"branchId": "5b36388c7e50f13e845346e2",
"classId" : "5b36388c7e50f13e8453433x"
}
]
Таблица выплат:
[
{
"_id": "5b372ea5b0103b4ab2409e32",
"userId": "5b372ea5b0103b4ab2409ea6",
"enrollmentCode": "X1",
"branchId": "5b36388c7e50f13e845346e2",
"classId" : "5b36388c7e50f13e8453433d",
"receivedAmount": 5000,
"balanceAmount": 2000,
"paidStatus": false
},
{
"_id": "5b372ea5b0103b4ab2409e32",
"userId": "5b372ea5b0103b4ab2409ea6",
"enrollmentCode": "X1",
"branchId": "5b36388c7e50f13e845346e2",
"classId" : "5b36388c7e50f13e8453433d",
"receivedAmount": 1000,
"balanceAmount": 500,
"paidStatus": false
},
{
"_id": "5b372ea5b0103b4ab2409e32",
"userId": "5b372ea5b0103b4ab2409ea7",
"classId" : "5b36388c7e50f13e8453433d",
"enrollmentCode": "X2",
"branchId": "5b36388c7e50f13e845346e2",
"receivedAmount": 1000,
"balanceAmount": 500,
"paidStatus": true
}
]
Таблица филиалов
[
{
"_id": "5b36388c7e50f13e845346e2",
"name": "Test 1"
},
{
"_id": "5b36388c7e50f13e845346e2",
"name": "Test 2"
},
{
"_id": "5b36388c7e50f13e845346e2",
"name": "Test 3"
}
]
Таблица классов такая же, как у нас.
Мой запрос:
db.users.aggregate([ { $match : { role : "student"}} , { $group : { _id : "$student.branchId", totalStudents : { $sum : 1 }}}, {$lookup: {from: "branches", localField: "_id", foreignField: "_id", as: "branches"}}, {$project : { _id : 1, totalStudents : 1, 'branches.branchCode' : 1, 'branches.name' :1}}] )
Я могу получить количество студентов, отруби имя и все, кроме я не имею понятия группировать по таблице платежей и суммировать сумму ..
Вывод моего запроса:
[{ "_id" : ObjectId("5b89161d1326f1646fabb59e"), "totalStudents" : 295, "receivedAmount" : 1000, "branches" : [ {
"name" : "abcd" } ] }
{ "_id" : ObjectId("5b47343d55b8344687674b7b"), "totalStudents" : 104, "branches" : [ { "name" : "xxxx" } ] }]
Ожидаемый вывод:
[
{
"_id": ObjectId("5b89161d1326f1646fabb59e"),
"totalStudents": 295,
"receivedAmount" : 12345,
"paidStudents" : 1,
"branches": [
{
"name": "abcd"
}
]
}
{
"_id": ObjectId("5b47343d55b8344687674b7b"),
"totalStudents": 104,
"receivedAmount" : 12345,
"paidStudents" : 1,
"branches": [
{
"name": "xxxx"
}
]
}
]