4

我有一个模式并指定登录是唯一的。当我使用 findByIdAndUpdate 并传递查询 $set 来更新用户对象时,登录 dup 时它没有抛出错误。有谁知道为什么以及如何更新对象并强制模式验证?

谢谢!

// UserSchema.js
var schema = new Schema({
  login: {
    required: true,
    unique: true
  },
  password: {
    index: true,
    type: String
  }
});


// Update
UserSchema.findByIdAndUpdate('someID', { '$set': { login: 'abc' } }, function (error, user) {
    callback(error, user);
});
4

2 回答 2

5

您只需将 runValidators 设置为 true:

findByIdAndUpdate(req.params.id, {$set: data}, {runValidators: true}, function (err, doc) {
    if (err) {
        // Handle validation errors
    }
})

更多信息:http: //mongoosejs.com/docs/api.html#findOneAndUpdate

于 2016-03-15T16:12:51.737 回答
1

在 Mongoose 中使用速记辅助方法会绕过验证,因此您需要使用 3 步方法:

  1. 寻找
  2. 编辑
  3. 节省

例如:

// 1: Find
UserSchema.findById( 'someID',
  function (err, user) {
    if(!err){
      // 2: Edit
      user.login = 'abc';
      // 3: Save
      user.save(function (err, user) {
        if (err) {
          console.log(err);
          return;
        }
        console.log('User saved: ' + user);
      });
    }
  }
);  
于 2013-09-20T08:46:31.263 回答