То, что вы пытаетесь сохранить как creationDateTime
, определенно должно иметь тип Date
, и вы не должны хранить его как строку или объект. Это упростит любые будущие запросы и позволит избежать некоторых непредвиденных проблем, которые могут возникнуть, если вы сохранили это значение в виде строки. Вы можете воспользоваться функцией по умолчанию mon goose, которая будет запускаться Date.now
каждый раз, когда вы сохраняете новый документ, поэтому ваша схема может выглядеть следующим образом:
const TaskSchema = new mongoose.Schema({
text: { type: String, required: true },
completed: Boolean,
creationDateTime: {
type: Date,
default: Date.now
}
});
Когда Что касается форматирования, mon goose предлагает хорошую возможность определения виртуальных свойств. Такое поле не будет храниться в базе данных, но будет динамически оцениваться, и именно здесь вы можете повторно использовать свои логи форматирования c:
function dateTimeToParts(date) {
let day = date.getDate().toString().length <= 1 ? '0' + date.getDate() : date.getDate();
let month = date.getMonth().toString().length <= 1 ? `0${parseInt(date.getMonth() + 1)}`: date.getMonth();
let year = date.getFullYear().toString().length <= 1 ? '0' + date.getFullYear() : date.getFullYear();
let hours = date.getHours().toString().length <= 1 ? '0' + date.getHours() : date.getHours();
let minutes = date.getMinutes().toString().length <= 1 ? '0' + date.getMinutes() : date.getMinutes();
let seconds = date.getSeconds().toString().length <= 1 ? '0' + date.getSeconds() : date.getSeconds();
return { day, month, year, hours, minutes, seconds };
}
TaskSchema.virtual('createdOn').get(function() {
let { day, month, year, hours, minutes, seconds } = dateTimeToParts(
this.creationDateTime
);
return {
date: `${day}/${month}/${year}`,
time: `${hours}:${minutes}:${seconds}`
};
});
Таким образом, имея ниже документ в вашей базе данных MongoDB:
{
"_id" : ObjectId("5e2e7c93397e8124b81dfcaa"),
"creationDateTime" : ISODate("2020-01-27T06:00:51.409Z"),
"text" : "abc",
"__v" : 0
}
Вы можете запустить следующий код:
let task = await Task.findOne({ _id: ObjectId("5e2e7c93397e8124b81dfcaa") });
console.log(task.createdOn);
Чтобы получить следующий вывод:
{ date: '26/01/2020', time: '22:00:51' }