あなたの問題に対して 3 つの解決策を提案できます。
最初の解決策ObjectID
は、 s なしでref
s を他のコレクションに格納することです。
var questionSchema = new Schema({
comments: [ObjectId]
})
問題なく動作しますが、クエリごとに入力するモデルを指定する必要があります。
Question.findOne().populate('comments', Answer).exec(next)
しかし、とモデルcomments
の両方を使用してデータを入力できるかどうかはわかりません。Comment
Answer
もう 1 つの解決策は、 scomments
を使用してオブジェクトとして保存することです。ref
var questionSchema = new Schema({
comments: [{
comment: {type: ObjectId, ref: 'Comment'}
answer: {type: ObjectId, ref: 'Answer'}
}]
})
1 つのクエリでコメントと回答の両方を入力できるようになりました。
Question.findOne().populate('comments.comment comments.answer').exec(next)
それらを単一の配列で表示したい場合は、仮想を追加できます:
questionSchema.virtual('comments_and_answers').get(function () {
return this.comments.map(function (c) {
return c.comment || c.answer
});
})
toObject transfer functionを使用して、元の配列を取り除くことができます。
最後に、両方に同じマングース モデルを使用して、コメントと回答を 1 つのコレクションに格納するようにスキーマを再設計することができます。