Как обновить свойство с текущей датой в схеме Mongoose при каждом сохранении? - PullRequest
13 голосов
/ 06 октября 2011

В моих коллекциях баз данных я хочу обновлять поле 'lastChanged' каждый раз, когда запись обновляется с использованием текущей даты и времени.Я хочу, чтобы он был в том же формате, что и дата по умолчанию для mongoose, например:

ISODate("2011-10-06T14: 01: 31.106Z")

Какие-нибудь слова мудрости?

Ответы [ 3 ]

17 голосов
/ 30 января 2012

Если вы просто хотите использовать строку ISO:

new Date().toISOString()
11 голосов
/ 11 апреля 2014

Один из способов сделать это - использовать Mongoose Middleware и обновить поле предварительного сохранения.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//schema
var SomethingSchema = new Schema({
  text: {type: String},
  createdAt: {type: Date, default: Date.now},
  updatedAt: {type: Date, default: Date.now}
});

//middle ware in serial
SomethingSchema.pre('save', function preSave(next){
  var something = this;
  something.updatedAt(Date.now());
  next();
});

Однако кажется, что промежуточное программное обеспечение не всегда вызывается:

Примечания по findAndUpdate ()

pre и post не вызываются для операций обновления, выполняемых непосредственно в базе данных, включая Model.update, .findByIdAndUpdate, .findOneAndUpdate, .findOneAndRemove и .findByIdAndRemove .order для использования pre или post промежуточное программное обеспечение, вы должны find() документ и вызвать функции init, validate, save или remove документа. См. объяснение .

Обновление: См. Этот вопрос " добавить поля create_at и updated_at в схемы mongoose "

7 голосов
/ 25 октября 2013

Через несколько дней Mongo собирается анонсировать новую версию 2.6 (в настоящее время вы можете скачать экспериментальную версию 2.5.x). Среди многих других функций вы можете использовать $ currentDate , которая будет делать именно то, что вы хотите:

db.users.update( 
  <criteria>,
  {
     $currentDate: { yourField: true},
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...