更新验证错误,“预期的_id是唯一的”,其上下文为:设置了“查询”,但在查询中使用$ and

时间:2019-09-09 13:48:55

标签: mongoose

我使用Mongoose使用以下选项对更新运行验证:

{
  runValidators: true,
  context: 'query',
  new: true
}

这很好并且可以按预期进行验证,直到我的findOneAndUpdate查询包含$ and运算符为止。

以下代码按预期进行更新-在更新的字段上运行验证并且不返回错误

Model.findOneAndUpdate({_id: '5c7551650bdecf4388ac984e', name: 'A Name'}, {name: 'A New Name'})

以下代码返回这些错误:

ValidationError:_id:错误,预期_id是唯一的。

ValidationError:_id:错误,预期name是唯一的。

这些错误是由名为mongoose-unique-validator的插件创建的,该插件可验证唯一性。

Model.findOneAndUpdate({$and: [{_id: '5c7551650bdecf4388ac984e'}, {name: 'A Name'}]}, {name: 'A New Name'})

我需要$and的原因是因为我还将CASL用于访问控制,这就是它创建我想用于安全性的记录级访问查询的方式。

当我第一次设置更新验证逻辑时,即当我学会将context: 'query'添加到我的选项中时,我就经历了这种类型的验证错误,但是现在我很茫然。

难道我不能在查询中使用$and吗?为什么会这样?

0 个答案:

没有答案