2017-09-04 78 views
0

文件我想打一個項目,在我的MongoDB \貓鼬項目註釋。 因爲這是我的MongoDB的第一個項目,我有一個奇怪的問題:貓鼬:選擇具有參考其他文檔

我需要這樣的

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

的項目文件,我需要的評論爲這個項目是這樣的:

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得到所有comments爲這個項目,如果我只知道Item.name價值?我可以populate()做一個單一的貓鼬請求或者我得把兩個請求(第一個拿到Item查找_id,第二個得到Comments哪裏itemId == Item._id

或者,也許我這樣做完全錯誤的方式?

回答

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,你會做

item.populate('comments').execPopulate().then(() => { 
    console.log(item.comments); 
}); 

我們使用execPopulate(),因爲你只需要填寫的意見。

如果你有模式Item,你會做

Item.findOne(...).populate('comments').exec((err, item) => { 
    console.log(item.comments); 
});