Как написать запрос для группировки документов mongoDB и получения полной информации о категории - PullRequest
0 голосов
/ 02 ноября 2019
[
  {
    "EmpId": "SV1011",
    "CheckInTime": "2019-11-01T06:43:40.551Z",
    "__v": 0
  },
  {
    "EmpId": "SV1011",
    "CheckInTime": "2019-11-01T06:43:41.305Z",
    "__v": 0
  },
  {
    "EmpId": "SV1011",
    "CheckOutTime": "2019-11-01T06:43:42.487Z",
    "__v": 0
  },
  {
    "EmpId": "SV1012",
    "CheckOutTime": "2019-11-01T06:43:48.915Z",
    "__v": 0
  },
  {
    "EmpId": "SV1012",
    "CheckInTime": "2019-11-01T06:43:49.704Z",
    "__v": 0
  }
]

Как использовать агрегат и группу для получения выходных данных, как показано ниже.

Выходные данные

[
  { "EmpId": "SV1011",
    "CheckInTime":{"2019-11-01T06:43:40.551Z",2019-11-01T06:43:41.305Z},
   "CheckOutTime":{"2019-11-01T06:43:40.551Z",2019-11-01T06:43:41.305Z}
  },
 { "EmpId": "SV1012",
    "CheckInTime":{"2019-11-01T06:43:40.551Z",2019-11-01T06:43:41.305Z},
    "CheckOutTime":{"2019-11-01T06:43:40.551Z",2019-11-01T06:43:41.305Z}
  },

]

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете использовать оператор addToSet, чтобы выполнить то, что вы хотите.

db.collection.aggregate([
  {
    $group: {
      _id: "$EmpId",
      "CheckInTime": {
        $addToSet: "$CheckInTime"
      },
      "CheckOutTime": {
        $addToSet: "$CheckOutTime"
      },

    }
  },
  {
    $project: {
      _id: 0,
      "EmpId": "$_id",
      "CheckInTime": 1,
      "CheckOutTime": 1
    }
  }
])

Вывод:

[
  {
    "CheckInTime": [
      "2019-11-01T06:43:41.305Z",
      "2019-11-01T06:43:40.551Z"
    ],
    "CheckOutTime": [
      "2019-11-01T06:43:42.487Z"
    ],
    "EmpId": "SV1011"
  },
  {
    "CheckInTime": [
      "2019-11-01T06:43:49.704Z"
    ],
    "CheckOutTime": [
      "2019-11-01T06:43:48.915Z"
    ],
    "EmpId": "SV1012"
  }
]

Детская площадка:

https://mongoplayground.net/p/88W-GTtEHGI

Документы:

https://docs.mongodb.com/manual/reference/operator/update/addToSet/

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