2016-12-22 4 views
0

私は整理しようとしている複雑なモンゴセの人口問題を抱えており、誰かが光を放つことができるかどうか疑問に思っています(RDBMSを使うことができますスキーマのビットはMongoにうまく行きます)。サブ文書へのサブページのサブモデル

StudyParticipantという2つのモデルがあります。

研究:

var StudySchema = new mongoose.Schema({ 
    name: String, 
    checklist: [ 
    { 
     order: Number, 
     text: String 
    } 
    ] 
}); 

参加者:参加者は、(彼らは常に研究の一部です)が作成されると

var ParticipantSchema = new mongoose.Schema({ 
    name: String, 
    checklist_items: [ 
    { 
     isComplete: Boolean, 
     item: { 
     type: Schema.Types.ObjectId 
     } 
    } 
    ] 
}); 

、チェックリストは、参加者にコピーされ、私たちがすることができます個々の参加者にそのチェックリストを記録する。私は単にParticipant.checklist_items.itemにIDをプッシュして、それらを研究の項目に戻します。 (これらは参照されており、卸売りされていないので、学習チェックリストへのテキストの変更は自然に伝播します)

参加者を取得するときにこのモデルを作成します。私がそれらを手に入れるとき、私はのitemに研究の対応する項目を入力します。希望は意味をなさない。

Participant.findById(req.params.id)          
    .populate({path: 'checklist_items.item', populate: {model: 'Study', path: 'checklist'})           
    .exec() 

しかし、無サイコロ:

私のようなものを試してみました。私はこれをしばらく猿に囲まれました。私はこの子ども間のタイプの人口をどうやってやっているのか分かりません。

アイデア?これは可能ですか?

編集:正しい用語

答えて

0

と明らかタイトルあなたは、単にこれを試すことができます。

Participant.findById(req.params.id)          
    .populate({path: 'checklist_items.item', model: 'Study'})           
    .exec() 

これは、あなたがparticipantpopulatechecklist_items内のすべてのitemを必要取得します。

それが機能するかどうかを確認してください。

+0

ありがとうございます。私はStudyオブジェクトではなく、Studyオブジェクトの一部であるサブオブジェクト( 'study.checklist'配列内のアイテム)を実装したいので、これはうまくいきません。 mongoは、 'studies.findOne({_id:ObjectId( 'XXX')})'のようなクエリを発行しました。私が実際にやりたいことは、オブジェクトではなく、研究そのものです。今、私はそれを書いている、私はこれが可能ではない可能性があることを実現し、b)それについて完全に行くための間違った方法。 –

関連する問題