У меня есть поддокумент с хуком предварительной проверки.Когда я создаю новый документ, ошибка в проверке этого вложенного документа будет правильно блокировать создание документа.
Однако при обновлении проверка вложенного документа будет запущена и выдаст ошибку, но не заблокирует обновление документа,Недопустимые данные поддокумента сохраняются в БД.
Вот мои схемы (упрощенно для краткости):
const contactSchema = new mongoose.Schema(
{
firstName: String,
lastName: String,
addresses: [addressSchema],
}
);
const addressSchema = new mongoose.Schema(
{
address: String,
city: String,
regionId: String,
postalCode: String,
countryId: String,
}
);
// Note: my actual validate hook does a lot more work to validate the full address.
// This is just simplified for demo purposes.
addressSchema.pre(`validate`, function(this) {
if (!isValidCountryId(this.countryId)) {
console.log(`THROW`);
throw new Error(`countryIdIsInvalid`);
}
});
Когда я запускаю это обновление ниже, THROW
будет распечатываться изconsole.log
.Но документ контакта все еще сохраняется с недопустимым countryId
:
const update = {
addresses: [
{
address: `12345`,
city: `Somewhere`,
regionId: `CA`,
postalCode: `90000`,
countryId: ``,
}
]
};
ContactModel.findByIdAndUpdate(
contactId,
update,
{ runValidators: true }
);
Чего мне не хватает?Или это не предназначено для работы?