При проверке поддокумента обновление не блокируется. - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть поддокумент с хуком предварительной проверки.Когда я создаю новый документ, ошибка в проверке этого вложенного документа будет правильно блокировать создание документа.

Однако при обновлении проверка вложенного документа будет запущена и выдаст ошибку, но не заблокирует обновление документа,Недопустимые данные поддокумента сохраняются в БД.

Вот мои схемы (упрощенно для краткости):

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 }
);

Чего мне не хватает?Или это не предназначено для работы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...