Преобразование строки даты в формат ISO выпуска mongodb - PullRequest
0 голосов
/ 29 ноября 2018

Я соединяю две таблицы вместе по имени сотрудника.У меня эта часть работает.Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что мне нужны дата и время в формате ISO, и я должен сделать это в рамках своей агрегации.Я не могу понять, как.

Мне нужно преобразовать:

2018-11-03:10:47:31

В:

2018-11-03T10:47:31.000Z

коллекция сотрудников

{
    "_id" : ObjectId("(Object ID here"),
    "name": "Test"
}

коллекция часов

{
    "_id" : ObjectId("(Object ID here"),
    "employeeName": "Test",
    "time": "2014-11-21:17:15:00"
}

Вот мое присоединение

dbo.collection("employee").aggregate([
{ "$lookup": {
    "localField": "name",
    "from": "clock",
    "foreignField": "clock.employeeName",
    "as": "employeeInfo"
}
}]).toArray(function(err, results) {
    console.log(results);
});

1 Ответ

0 голосов
/ 29 ноября 2018

Поскольку ваша дата в очень странном формате 2018-11-03:10:47:31, вы не можете легко разобрать ее с помощью предыдущей версии Монго 4.0.Причина этого заключается в том, что в версии 4.0 опция format была добавлена ​​к функции $dateFromString, которая позволяет вам указать произвольный формат даты, с которым нужно выполнить синтаксический анализ.Итак, как вы упомянули, если 4.0 является опцией, вы должны сделать что-то вроде этого:

Добавление поля в вашу агрегацию после того, как вы раскручиваете employeeInfo:

$addFields: {
  "employeeInfo.date": {
    $dateFromString: {
      dateString: "$employeeInfo.time",
      format: "%Y-%m-%d:%H:%M:%S"
    }
  }
}

Или проецируете его вваш проектный конвейер.

{
    "$project": {
      "employeeInfo.time": {
        $dateFromString: {
          dateString: "$employeeInfo.time",
          format: "%Y-%m-%d:%H:%M:%S"
        }
      }
    }
  }

При проектном подходе может потребоваться также и unwind, так как он может быть требователен к факту, что у вас есть массив как employeeInfo

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