【问题标题】:How to skip mongoose schema validation during update API call如何在更新 API 调用期间跳过猫鼬模式验证
【发布时间】:2018-03-05 09:12:38
【问题描述】:

我的模型中的一个字段被定义为

providerID: { type: Number, required: true, unique: true }.

providerId 是第一次插入提供者详细信息时插入的唯一编号。在某些情况下,我需要更新提供者详细信息,例如名称地址等。在更新 api 调用期间,mongoose 会为字段“providerID”引发验证错误' 因为我根本不会改变它。

有没有办法在 api 调用期间跳过/忽略“providerID”的验证? 理想情况下,我希望猫鼬在插入 api 调用期间抛出验证错误,并在更新 api 调用期间跳过验证。

【问题讨论】:

  • 嗯...你确定你没有在更新时改变providerID吗?如果您更新现有文档,保持某些必填或唯一字段不变,则应该没有任何问题。发布您的架构和代码,了解您如何插入和更新。
  • 您可以在stackoverflow.com/questions/46355932/…找到型号和控制器代码

标签: javascript node.js mongodb mongoose


【解决方案1】:

这是我查看您的code 的猜测。

 transportModel.findOneAndUpdate(conditions, update, { returnOriginal: false, upsert: true }, callback);

您的findOneAndUpdate() 正在使用upsert: true 选项,即如果对象不存在则创建该对象。该对象是否可能不存在?如果是这样,它将尝试使用您提供的数据创建一个新对象,而不使用providerID,这将触发错误。

使用findOne() 在相同条件下运行快速测试。

 transportModel.findOne(conditions, function (err, model) {
     if (!model)
         console.log('something is wrong with your data or conditions');
 });

【讨论】:

  • 我删除了 upsert: true findOneAndUpdate 查询,但没有运气
猜你喜欢
  • 2015-01-27
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
  • 2020-09-14
  • 2014-08-21
  • 1970-01-01
相关资源
最近更新 更多