1

projectsコレクションとコレクションがあるように MongoDB 設計をセットアップしようとしていますpeopleProjectモデル スキーマには、モデルを参照するアイテムが含まれてい_peopleますPeople。(彼/彼女が属するプロジェクトを参照するためのフィールドを持つ People モデルとは対照的に、このようにする必要があります)

peopleコンテナー内に新しいドキュメントが作成されるたびに、プロジェクトごとに 1 つのマネージャーしか存在できないことを検証する必要があります。スキーマで要素検証のクエリを実行できれば、これは非常に簡単ですが、それが可能だとは思いません...

People現在のモデルのスキーマは次のとおりです。

const peopleSchema = new Schema( {
    name: {
        type: Schema.Types.String,
        required: true,
        minlength: 3,
        maxlength: 25,
        trim: true,
        select: true
    },
    isManager: {
        type: Schema.Types.Boolean,
        default: false,
        validate: {
            validator: function ( v ) {
                // How can I check if there are any existing `people` documents with the 
                // `isManager` set to true, which are referenced by the same project.
                // If I can return a promise from here, then I can just execute a query and verify the results
            },
            message: 'There can be only one manager per each group'
        }
    }
})

isManager.validate.validator関数でわかるように、このドキュメントが true に設定されている場合、マネージャーでもある同じプロジェクトによって参照されてisManagerいるドキュメントがまだ存在しないことを確認する方法を見つける必要があることに注意しました。person

どのプロジェクトがこのドキュメントを参照しているかを知ることは問題ではありません。どこかにそれがあるでしょう。クエリを実行する方法を知る必要があるだけです..それは可能ですか?

4

1 に答える 1

2

Mongooses Middlewareの機能を使用することで、目的の効果を達成することができました。事前保存フック内での検証の設定は問題なく機能しました

于 2016-01-29T21:42:11.630 に答える