Мой код ниже содержит схему и промежуточное программное обеспечение pre ('update') для манипулирования свойством name схемы.На самом деле, я просто хочу добавить суффикс к свойству name, если значение уже существует в коллекции элементов.
const ItemSchema = mongoose.Schema({
...
name : {type : String, required : true, unique : true, trim : true},
...
})
ItemSchema.pre("update", async function() {
let name = this.getUpdate().$set.name;
if (!name) return Promise.resolve();
let count = await ItemModel.find({name}).count().exec();
if(count>0) name = name + "_SOME_SUFFIX_BY_SOME_LOGIC";
this.getUpdate().$set.name = name;
});
ItemSchema.plugin(require('mongoose-unique-validator'));
const ItemModel = mongoose.model('Item', ItemSchema);
module.exports = ItemModel;
, когда я затем пытаюсь обновить / пропатчить свойство name, кажется, что счетчик правильно получает значениеномер 1 и обновляет имя с помощью суффикса.После этого я корректно обновляю имя в объекте обновления на правильно манипулируемое имя (при этом имя с суффиксом наверняка не существует в коллекции)
, но теперь, когда я пытаюсь обновить, я получаю следующееОшибка:
Проверка не удалась: имя: Ошибка, ожидается, что name
будет уникальным.Значение: `[name] _SOME_SUFFIX_BY_SOME_LOGIC '
Таким образом, он говорит мне, что новое суффиксное имя уже существует в базе данных, даже если оно не существует.
(я искал суффиксное имя внутри базы данных, но могу заверить, что его там нет, так как я запускаю его на тестовых коллекциях, пока не так много записей)
версия узла: 8.1.1 версия mongoose: 5.1.3 система: Ubuntu 16.04