#mongodb
Вопрос:
У меня есть строка даты/времени, и я хотел бы преобразовать ее в дату без указания времени. Я хотел бы добавить еще одно поле для хранения этого нового значения. Я попробовал ниже, но это не работает. Есть ли способ удалить часть времени из строки ?
Объект
[{
"ID" : "001247174102",
"VersionInfo" : {
"IsLatestVersion" : true,
"VersionDate" : "2019-09-19T10:23:46.429-06:00"
}
}]
TESTONE = {
$addFields: {
DateTest: {$dateFromString: { format: "%Y-%m-%d", dateString: "$VersionInfo.VersionDate", onNull: new Date(0)} }
}
};
Комментарии:
1. Хранение значений даты/времени в виде строк является недостатком дизайна, всегда используйте правильные
Date
объекты. В Mongo 5.0 вы можете использовать $dateTrunc для удаления временной части, т. Е. Установить время на00:00:00
2. Я знаю, но я больше не могу изменять базу данных 🙁
Ответ №1:
Как уже было написано, вы никогда не должны хранить значения даты/времени в виде строки. Поэтому в этом случае сначала создайте правильные Date
объекты, а затем установите время, чтобы 00:00:00
:
{
$addFields: {
DateTest: {
$dateFromString: {
format: "%Y-%m-%dT%H:%M:%S.%Lz",
dateString: "$VersionInfo.VersionDate",
onNull: new Date(0)
}
}
}
},
{
$set: {
DayTest: {
$dateFromParts: {
year: {$year: "$DateTest"},
month: {$month: "$DateTest"},
day: {$dayOfMonth: "$DateTest"}
}
}
}
},
Если вы уже запускаете версию 5.0 Mongo, вы можете сделать ее короче:
{
$addFields: {
DateTest: {
$dateFromString: {
format: "%Y-%m-%dT%H:%M:%S.%Lz",
dateString: "$VersionInfo.VersionDate",
onNull: new Date(0)
}
}
}
},
{
$set: {
DayTest: {
$dateTrunc: {
date: "$DateTest",
unit: "day"
}
}
}
},