Я не знаю, связано ли это с самим Mongoose или с драйвером MongoDB.Поле операции Mongoose - это «найти», когда я «обновляю», почему?
Здесь находится сделка. Я хочу добавить созданные/обновленные поля в мои схемы. Я знаю, что Mongoose может сделать это из коробки, но мне нужно использовать временную метку Unix вместо объекта даты. Для этого я добавил плагин, который я нашел в Github (link to plugin), и изменил тип поля на 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 будет равен 'найти', а не 'обновление', так «обновленное» поле не изменяется.
Я не могу понять, почему так, почему операция «найти», а не «обновить». Я попытался найти исходный код Mongoose, но на данный момент я не нашел ответа.
Update делает регулярный вызов драйвера Монго. Schema.update обходит промежуточное ПО по дизайну. Следовательно '.pre' не работает с' update'. Вы можете получить более подробную информацию: https://github.com/Automattic/mongoose/issues/2672 –