2017-08-30 10 views
0

私は3つのコレクションを持っています:ユーザー、質問と回答。ユーザーは、質問と回答のいずれかをお気に入りとして選択できます。ユーザーがお気に入りとしてマークした質問と回答を表示する必要があります。MongoDB:2つの異なる文書の参照を他の文書の1つのフィールドに保存します

これはどのアプローチが最適ですか?

私の最初の考えは、質問と回答が好きだったusers_idを保存する質問と回答の両方に配列フィールドを作成することでした。次に、情報を取得するために、db.questions.find({お気に入り:user_id})とdb.answers.find({お気に入り:user_is})という2つのクエリを作成する必要があります。しかし、私はその情報を1つのクエリに入れたいと思っています。

また、ユーザコレクションにquestions_idsとanswers_idsの配列を保存することも考えました。しかし、私はそれが最良のアプローチであるかどうか分からず、同様にMongooseを使ってこれを定義する方法もわかりません。

ありがとうございました

答えて

1

私は後者のアプローチに行きます。ユーザーモデルに、あなたが定義されている以下の必要があると思いますので、次の場合にあなた続い

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() 

:モデルで定義されたものと

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

を、あなたの「マークお気に入りとして」ロジックのようなものかもしれません書類が必要です.populate()http://mongoosejs.com/docs/populate.html

const user = await User.findById(someId).populate('favoriteAnswers favoriteQuestions').exec() 
関連する問題