findByIdAndUpdate $设置不检查唯一?

我有一个模式,并指定login是唯一的是真实的。 当我使用findByIdAndUpdate并传递查询$ set来更新用户对象时,它在login为dup时不会返回错误。 有谁知道为什么和如何更新对象和强制模式validation?

谢谢!

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

在Mongoose中使用简写助手方法绕过validation,所以你需要使用3步法:

  1. 编辑
  2. 保存

例如:

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

你只需要设置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