2

Mongoose はサポートしていますか、または配列に埋め込まれたスキーマの複数の「オプション」をサポートする利用可能なパッケージはありますか?

たとえば、thingsプロパティには、次の 2 つのスキーマのいずれかのみを含めることができます。

new Schema({
    things: [{
        requiredProp: String,
        otherProp: Number
    }, {
        otherOption: Number
    }]
});

つまり、このプロパティに何か(別名 Schema.Types.Mixed) を格納することを許可したくはありませんが、可能な定義はこれら 2 つだけです。

または、この問題を回避するためのスキーマ設計に関する推奨事項はありますか?

4

1 に答える 1

3

スキーマの配列型で dict を 1 つだけ定義し、それらが必要かどうかを mongoose スキーマ型ロジックで設定する必要があります。次のように、フィールドのいずれかが設定されていることを確認するためにさらにロジックを実行する場合は、事前保存を使用します。

var MySchema = new Schema({
    things: [{
        requiredProp: {type: String, required: true},
        otherProp: Number,
        otherOption: Number,
    }]
});

MySchema.pre('save', function(next) {
    if (!this.otherProp && !this.otherOption) {
        next(new Error('Both otherProp and otherOption can\'t be null'))
    } else {
        next()
    }
})

otherProp も otherOption も設定されていない場合、オブジェクトを保存するとエラーが返されます。

于 2013-12-19T11:12:05.807 に答える