对`findOneAndUpdate`失败的Mongoose唯一验证

时间:2018-04-23 02:16:48

标签: mongoose mongoose-schema

我有一个User模型,其用户名是一个唯一的密钥,它有一个自定义的唯一验证器。我遇到了一个问题,当我想更新用户并且username没有更改时,它会给出验证错误。在调用$set时,只有findOneAndUpdate已更改的内容才是好习惯吗?如果是这样,我认为我必须在调用findOneAndUpdate之前区分用户数据,我觉得这有点太重了。

const userSchema = new mongoose.Schema({
  username: {
    type: String,
    required: [true, 'username is required.'],
    trim: true,
    unique: true, // unique index, not unique validation
  },
…
});

this.model.findOneAndUpdate(
        { _id: req.params.id },
       {
        $set: {
          username: req.body.username,
          role: req.body.role
        }
      },
        { runValidators: true },
        (err) => {
          if (err) {
            console.error(err);
            return res.sendStatus(400);
          }
          return res.sendStatus(200);
        }
      )

1 个答案:

答案 0 :(得分:0)

您需要按照本文档中的说明将“上下文”选项设置为“查询”:https://mongoosejs.com/docs/validation.html#update-validators