2017-03-01 6 views
0

私は2つのスキーマ(ポートフォリオおよびポートフォリオに関連したプロジェクト)があります。モンゴースのリバースモデルの関係は?

portfolioSchema = new Schema({ 
    name: {type: String, required: true, unique: true}, 
    isActive: {type: Boolean, default: true} 
}); 

projectSchema = new Schema({ 
    name: {type: String, required: true, unique: true}, 
    isActive: {type: Boolean, required: true, default: true}, 
    portfolio: {type: mongoose.Schema.Types.ObjectId, ref: 'portfolioSchema', required: true}, 
    isCodeBaseFullyOwned: {type: Boolean, required: true, default: false} 
}); 

は、すべてのポートフォリオを選択して、その関連プロジェクトを「移入」する方法はありますか?私はポートフォリオ別にプロジェクトをグループ化できますが、ポートフォリオにプロジェクトがない場合は、この情報を追加的に取得する方法も考えなければなりません。

答えて

0

これには2通りの方法があります。 ポートフォリオにprojectIdの配列を追加して、そこにデータを入れることはできますが、更新時の参照の管理や管理には注意が払われていないと面倒になる可能性があります。

これは、他のオプションは、あなたが言ってきたように、ポートフォリオによって、プロジェクトをグループ化してから返すすべてのポートフォリオのIDを収集し、ポートフォリオを取得する2番目のクエリを実行している必要となる

portfolioSchema = new Schema({ 
    name: {type: String, required: true, unique: true}, 
    isActive: {type: Boolean, default: true}, 
    projects: [{type: mongoose.Schema.Types.ObjectId, ref: 'projectSchema', required: true}] 
}); 

にportfolioSchemaを更新することで行うことができます

{_id: {$nin: <array of already returned portfolio ids>}} 

両方のオプションには長所と短所がありますが、これらは私が考えることができる唯一の2つのオプションです。

+0

これらのリバースルックアップルーチンをスムーズにするための小さなフックを書くことができましたが、2014年に予約された誰かがこれを実装する提案を見つけました。なぜそれが拾われなかったのか、特徴。 – abolotnov

+0

mongoDBには素晴らしい機能がたくさんあります。 –