0

いくつかの必須フィールドを持つスキーマがあります。propを使用してドキュメントを保存するときに、検証を実行せpublished:falseにドキュメントをそのまま保存したいと考えています。後で、すべての検証を実行したいと思います。published:true

私はこれがうまくいくと思った:

MySchema.pre('validate', function(next) {
    if(this._doc.published === false) {
        //don't run validation
        next();
    }
    else {
        this.validate(next);
    }
});

しかし、これは機能していません。必要なプロパティで検証エラーが返されます。

では、一部のシナリオで検証を実行せず、別のシナリオで実行するにはどうすればよいでしょうか? これを行う最もエレガントな方法は何ですか?

4

1 に答える 1

0

これをお試し下さい、

TagSchema.pre('validate', function(next) {
    if (!this.published)
        next();
    else {
        var error = new mongoose.Error.ValidationError(this);
        next(error);
    }
});

テストスキーマ

var TagSchema = new mongoose.Schema({
    name: {type: String, require: true},
    published: Boolean,
    tags: [String]
});

publishedtrue

var t = new Tag({
    published: true,
    tags: ['t1']
});

t.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('save tag successfully...');
});

結果:

{ [ValidationError: Tag validation failed]
  message: 'Tag validation failed',
  name: 'ValidationError',
  errors: {} }

で、結果publishedfalse

save tag successfully...
于 2016-03-18T04:37:31.293 に答える