4

私はスキーマを持っており、ログインが一意であることを指定しています。findByIdAndUpdate を使用し、クエリ $set を渡してユーザー オブジェクトを更新すると、ログインが重複しているときにエラーが返されませんでした。オブジェクトを更新してスキーマ検証を強制する必要がある理由と方法を知っている人はいますか?

ありがとう!

// 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 に答える