Я сохраняю меньший уникальный идентификатор для документов mongodb через предварительный хук.
schema.pre('save', function(next) {
this.refId = uid();
next();
});
Насколько я понимаю, save
хук запускается только при создании документа.
Но когда я получаю документ с помощью запроса и пытаюсь сохранить его, добавив новые данные, обновляется также поле уникального идентификатора (refId
).
const foo = Foo.findOne({refId: 'fwe23fw23'});
Foo.field = 'new value';
Foo.save(); // runs pre hook again;
Это заставляет меня поверить, что save
ловушка запускается при каждом запросе save()
, независимо от того, есть ли у него метод create
или update
.
Как сделать так, чтобы refId
создавался только один раз и никогда не менялся ни при какой операции обновления?
ПРИМЕЧАНИЕ: я понимаю, что могу использовать updateOne()
на самой модели для обновления документа. Но я хочу понять, почему сохранение самого документа не работает.