mongodb + группа с несколькими коллекциями - PullRequest
0 голосов
/ 26 марта 2020

У меня от 3 до 4 коллекций

  1. пользователей
  2. платежей
  3. филиалов
  4. оценок

В Таблица пользователей У нас есть несколько типов пользователей, таких как ученик, родители, как это.

В таблице платежей данные о платежах пользователей содержат данные о платежах с частичной или полной суммой.

В филиалах таблица содержит данные о филиалах. .

Я пытаюсь найти отчеты на основе филиалов и оценок.

  1. общее количество пользователей в этом филиале
  2. общее количество платных пользователей в этом филиале. на основе столбца paidStatus.
  3. общая сумма, полученная в этом филиале на основе столбца receiveAmount (сумма)
  4. общая группа баланса по пользователю и branchId
  5. имя филиала.

Пример таблицы пользователей:

[
  {
    "_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"
      }
    ]
  }
]
...