2017-08-30 83 views
0

我有三個集合:用戶,問題和答案。用戶可以選擇問題和答案作爲收藏夾。我需要顯示用戶已標記爲收藏的問題和答案。MongoDB:將其他文檔的一個字段另存爲2個不同文檔的引用

這是最好的方法嗎?

我的第一個想法是在問題和答案中都創建一個數組字段,以保存喜歡這個問題或答案的users_id。然後,爲了獲取信息,我應該做兩個查詢:db.questions.find({favorites:user_id})和db.answers.find({favorites:user_is})。但是,我想只在一個查詢中提供這些信息。

我還認爲要在用戶集合中保存一個包含questions_ids和answers_ids的數組。但我不確定這是否是最好的方法,我也不知道如何使用Mongoose來定義它。

謝謝你提前

回答

1

我會採用後一種方法。所以,在你的用戶模型,你有以下定義:

{ 
    favoriteAnswers: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Answer' 
    default: [] 
    }], 
    favoriteQuestions: [{ 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Question' 
    default: [] 
    }] 
} 

與在模型中定義,你的「標記爲收藏」的邏輯可能是這樣的:

const user = await User.findById(someId).exec() 
const answer = await Answer.findById(someAnswerId).exec() 
const question = await Question.findBYId(someQuestionId).exec() 

user.favoriteAnswers.addToSet(answer._id) 
user.favoriteQuestions.addToSet(question._id) 
await user.save() 

然後,當你需要撥打電話.populate()http://mongoosejs.com/docs/populate.html

const user = await User.findById(someId).populate('favoriteAnswers favoriteQuestions').exec() 
相關問題