Есть ли способ добавить поля create_at и updated_at в схему mongoose, не передавая их каждый раз, когда вызывается новый MyModel ()?
Поле create_at будет датой и будет добавлено только при создании документа. Поле updated_at будет обновляться с новой датой всякий раз, когда save () вызывается для документа.
Я пробовал это в моей схеме, но поле не отображается, если я не добавлю его с точностью:
var ItemSchema = new Schema({
name : { type: String, required: true, trim: true }
, created_at : { type: Date, required: true, default: Date.now }
});
Ответы:
Начиная с Mongoose 4.0, теперь вы можете установить опцию временных меток в схеме, чтобы Mongoose справился с этим за вас:
Вы можете изменить название используемых полей следующим образом:
http://mongoosejs.com/docs/guide.html#timestamps
источник
ОБНОВЛЕНИЕ: (5 лет спустя)
ОБНОВЛЕНИЕ: (4 года спустя)
Если вы используете в
ObjectId
качестве_id
поля (как правило, так), все, что вам нужно сделать, это:Проверьте мой оригинальный ответ ниже о том, как получить созданную временную метку с
_id
поля. Если вам нужно использовать идентификаторы из внешней системы, проверьте ответ Рхрна Нестерова.ОБНОВЛЕНИЕ: (2,5 года спустя)
Теперь вы можете использовать опцию #timestamps с версией mongoose> = 4.0.
Если установлены временные метки, Мангуста назначает
createdAt
иupdatedAt
поля для вашей схемы, назначенный типDate
.Вы также можете указать имена файлов временных меток:
ОРИГИНАЛЬНЫЙ ОТВЕТ:
Если вы используете ObjectId в качестве поля идентификации, вам не нужно
created_at
поле. ObjectIds имеет метод с именемgetTimestamp()
.Это вернет следующий вывод:
Более подробная информация здесь Как мне извлечь созданную дату из Mongo ObjectID
Для того, чтобы добавить
updated_at
поле необходимо использовать это:источник
Это то, что я в итоге сделал:
источник
getTimestamp()
Date.now()
где это возможно, вместоnew Date
более быстрого, поскольку это статический методИспользуйте встроенную
timestamps
опцию для вашей схемы.Это автоматически добавит
createdAt
иupdatedAt
поля к вашей схеме.http://mongoosejs.com/docs/guide.html#timestamps
источник
updatedAt
обновляется при каждом новом сохранении (при измененииЕсли использовать
update()
илиfindOneAndUpdate()
с
{upsert: true}
опциейты можешь использовать
$setOnInsert
источник
_id
поле по умолчанию Mogo , то вам не нужноcreatedAt
поле. Проверьте мой ответ ниже для более подробной информации.Добавить
timestamps
к вашемуSchema
как это , тоcreatedAt
иupdatedAt
будет автоматический генерировать для васТакже вы можете изменить
createdAt -> created_at
с помощьюисточник
Вот как я добился, создав и обновив.
Внутри моей схемы я добавил созданное и обновленное примерно так:
Затем в моем методе обновления статьи внутри контроллера статьи я добавил:
Жирные разделы представляют интерес.
источник
Документы: https://mongoosejs.com/docs/guide.html#timestamps.
источник
Вы можете использовать
timestamp
плагинmongoose-troop
для добавления этого поведения в любую схему.источник
Вы можете использовать этот плагин очень легко. Из документов:
А также установите имя поля, если хотите:
источник
мы можем достичь этого, используя также плагин схемы .
В
helpers/schemaPlugin.js
файлеи в
models/ItemSchema.js
файле:источник
В схеме вашей модели просто добавьте метки времени атрибута и присвойте ему значение true, как показано ниже:
источник
Теперь вы можете использовать это, так что нет необходимости включать эту опцию в каждую таблицу
источник
Моя версия мангуста 4.10.2
Кажется только крючок
findOneAndUpdate
это работаисточник
Используйте функцию для возврата вычисленного значения по умолчанию:
источник
Date.now()
в функцию, просто сделайте:...default: Date.now()
default: Date.now()
это будет неправильно. Во всяком случае этоdefault: Date.now
. В противном случае все ваши документы будут иметь одинаковую метку времени: время, когда ваше приложение запустилось;)default: Date.now
стратегия. намного чищеЯ на самом деле делаю это в спину
Если все идет хорошо с обновлением:
источник
Используйте machinepack-datetime для форматирования даты и времени.
Машинный пакет великолепен с понятным API, в отличие от экспресса или общего мира Javascript.
источник
Вы можете использовать промежуточное программное обеспечение и виртуалы . Вот пример для вашего
updated_at
поля:источник
name
. И да, это должно быть постоянным.