2017-09-04 11 views
0

MongoDB \ Mongooseプロジェクトにコメント付きアイテムを作成したいと思います。マングース:他のドキュメントを参照しているドキュメントを選択してください

が、私はこの

var itemSchema = new mongoose.Schema({ 
name: String 
}); 

などのアイテムの文書を必要とし、私はこのように、この項目のコメントを必要とする:これはMongoDBのと私の最初のプロジェクトであるため 、私は奇妙な質問がある

var commentSchema = new mongoose.Schema({ 
text: String, 
itemId: {type: mongoose.Schema.Types.ObjectId, ref: 'Item' }, 
}); 

そして私ははこのような私のアイテムの文書にIDをコメントとして残したくない:

var itemSchema = new mongoose.Schema({ 
name: String, 
comments: [ {type: mongoose.Schema.Types.ObjectId, ref: 'Comment' } ] 
}); 

Item.nameの値がわかっている場合は、モデルItemをこのアイテムのcommentsにするにはどうすればいいですか?私は、単一のマングース要求にpopulate()でそれを行うか、私は2つの要求をしなければならないことができます(最初のCommentsどこitemId == Item._id

それとも私がこの完全に間違った方法をやっているを取得するために第2 _idを検索するItemを取得する?

答えて

1

あなたはvirtual populationを使用することができます。

itemSchema.virtual('comments', { 
    ref: 'Comment', // The model to use 
    localField: '_id', // Find comments where `localField` 
    foreignField: 'itemId', // is equal to `foreignField` 
}); 

あなたはitem文書を持っている場合次に、あなたは

を行うだろう10
item.populate('comments').execPopulate().then(() => { 
    console.log(item.comments); 
}); 

execPopulate()を使用するのは、コメントを入力するだけだからです。

あなたはモデルItemを持っている場合は、どうなる

Item.findOne(...).populate('comments').exec((err, item) => { 
    console.log(item.comments); 
}); 
関連する問題