Поле операции Mongoose - это "найти", когда я делаю "обновление", почему?
Я не знаю, связано ли это с самим Mongoose или драйвером MongoDB.
Вот сделка. Я хочу добавить созданные / обновленные поля в мои схемы. Я знаю, что Mongoose может сделать это из коробки, но мне нужно использовать метку времени Unix вместо объекта даты. Для этого я добавил плагин, который я нашел на Github ( ссылка на плагин), и изменил тип поля на Number для хранения метки времени.
Я нашел эти строки в исходном коде плагина:
schema.pre('update', function(next) {
if (this.op === 'update') {
this._update = this._update || {};
this._update[updatedAt] = new Date().getTime;
this._update['$setOnInsert'] = this._update['$setOnInsert'] || {};
this._update['$setOnInsert'][createdAt] = new Date().getTime;
}
next();
});
Если я сделаю
MyAwesomeModel.update(...., function (e, d) {...});
this.op будет равен 'find', а не 'update', поэтому поле 'updated' не будет изменено.
Я не могу понять, почему это так, почему операция "найти", а не "обновить". Я пытался найти исходный код mongoose, но пока не нашел ответа.
1 ответ
Вы можете отказаться от плагина и использовать предложенный здесь код с Date.now () (now () возвращает метку времени Unix):
var ItemSchema = new Schema({
name : { type: String, required: true, trim: true },
created_at : { type: Number },
updated_at : { type: Number }
});
ItemSchema.pre('save', function(next){
now = Date.now();
this.updated_at = now;
if ( !this.created_at ) {
this.created_at = now;
}
next();
});