我可以为您的问题提出三种解决方案。
第一个解决方案是将ObjectID
没有ref
s 的 s 存储到另一个集合中:
var questionSchema = new Schema({
comments: [ObjectId]
})
它可以正常工作,但您需要指定要为每个查询填充的模型:
Question.findOne().populate('comments', Answer).exec(next)
但我不确定您是否能够同时comments
使用Comment
和Answer
模型进行填充。
另一种解决方案是使用 s 存储comments
为对象ref
:
var questionSchema = new Schema({
comments: [{
comment: {type: ObjectId, ref: 'Comment'}
answer: {type: ObjectId, ref: 'Answer'}
}]
})
现在,您可以在单个查询中填充评论和答案:
Question.findOne().populate('comments.comment comments.answer').exec(next)
如果您想在单个数组中查看它们,可以添加一个virtual:
questionSchema.virtual('comments_and_answers').get(function () {
return this.comments.map(function (c) {
return c.comment || c.answer
});
})
您可以使用toObject 传递函数摆脱原始数组。
最后,您可以重新设计架构以将评论和答案存储在一个集合中,并为两者使用相同的 mongoose 模型。