ОБНОВЛЕНИЕ: (5 лет спустя)
Примечание. Если вы решите использовать архитектуру Kappa ( Event Sourcing + CQRS ), вам не потребуется обновлять дату. Поскольку ваши данные являются неизменяемым журналом событий только для добавления, вам всегда нужна только дата создания события. Похоже на лямбда-архитектуру , описанную ниже. Тогда состояние вашего приложения является проекцией журнала событий (производные данные). Если вы получите последующее событие о существующей сущности, то вы будете использовать дату создания этого события в качестве обновленной даты для вашей сущности. Это широко используемая (и часто неправильно понимаемая) практика в системах микросервиса.
ОБНОВЛЕНИЕ: (4 года спустя)
Если вы используете в ObjectId
качестве _id
поля (как правило, так), все, что вам нужно сделать, это:
let document = {
updatedAt: new Date(),
}
Проверьте мой оригинальный ответ ниже о том, как получить созданную временную метку с _id
поля. Если вам нужно использовать идентификаторы из внешней системы, проверьте ответ Рхрна Нестерова.
ОБНОВЛЕНИЕ: (2,5 года спустя)
Теперь вы можете использовать опцию #timestamps с версией mongoose> = 4.0.
let ItemSchema = new Schema({
name: { type: String, required: true, trim: true }
},
{
timestamps: true
});
Если установлены временные метки, Мангуста назначает createdAt
и updatedAt
поля для вашей схемы, назначенный тип Date
.
Вы также можете указать имена файлов временных меток:
timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' }
Примечание. Если вы работаете с большим приложением с важными данными, вам следует пересмотреть вопрос об обновлении документов. Я бы посоветовал вам работать с неизменяемыми данными только для добавления ( лямбда-архитектура ). Это означает, что вы разрешаете только вставки. Обновления и удаления не должны быть разрешены! Если вы хотите «удалить» запись, вы можете легко вставить новую версию документа с некоторыми timestamp
/ version
filed, а затем установить deleted
поле в true
. Точно так же, если вы хотите обновить документ - вы создаете новый с обновленными соответствующими полями, а остальные поля копируются поверх. Затем для запроса этого документа вы получите тот, который имеет самую новую временную метку или самую высокую версию, которая является не "удалено" (deleted
поле не определено или ложно`).
Неизменность данных гарантирует, что ваши данные можно отлаживать - вы можете отслеживать историю каждого документа. Вы также можете выполнить откат к предыдущей версии документа, если что-то пойдет не так. Если вы используете такую архитектуру, ObjectId.getTimestamp()
это все, что вам нужно, и она не зависит от Mongoose.
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Если вы используете ObjectId в качестве поля идентификации, вам не нужно created_at
поле. ObjectIds имеет метод с именем getTimestamp()
.
ObjectId ( "507c7f79bcf86cd7994f6c0e"). GetTimestamp ()
Это вернет следующий вывод:
ISODate ( "2012-10-15T21: 26: 17Z")
Более подробная информация здесь Как мне извлечь созданную дату из Mongo ObjectID
Для того, чтобы добавить updated_at
поле необходимо использовать это:
var ArticleSchema = new Schema({
updated_at: { type: Date }
// rest of the fields go here
});
ArticleSchema.pre('save', function(next) {
this.updated_at = Date.now();
next();
});