[Mongoose] update(), findOneAndUpdate() で validation runValidators: true を設定する

Tadashi Shigeoka ·  Tue, October 2, 2018

Mongoose の update(), findOneAndUpdate() はデフォルトで validator は実行されないですが runValidators: true オプションを指定すると、validator を実行することができます。

mongoose | マングース

runValidators の使い方

Update Validators

In the above examples, you learned about document validation. Mongoose also supports validation for update() and findOneAndUpdate() operations. Update validators are off by default - you need to specify the runValidators option.

To turn on update validators, set the runValidators option for update() or findOneAndUpdate(). Be careful: update validators are off by default because they have several caveats.

var toySchema = new Schema({
  color: String,
  name: String
});

var Toy = db.model('Toys', toySchema);

Toy.schema.path('color').validate(function (value) {
  return /blue|green|white|red|orange|periwinkle/i.test(value);
}, 'Invalid color');

var opts = { runValidators: true };
Toy.updateOne({}, { color: 'bacon' }, opts, function (err) {
  assert.equal(err.errors.color.message,
    'Invalid color');
});

以下、日本語に翻訳した文章です。

Mongoose は update() および findOneAndUpdate() でも validation をサポートしています。Update validator はデフォルトではオフです。Update validator を実行するには runValidators オプションを指定する必要があります。

Update validator を有効にするには、update() または findOneAndUpdate() に対して runValidators オプションを設定します。

[注意]:いくつかの警告があるので、Update validator はデフォルトでオフです。

以上、Mongoose の update(), findOneAndUpdate() でも validator を実行したい、現場からお送りしました。