Я могу предложить три решения для вашей проблемы.
Первое решение для хранения ObjectID
сек без ref
с к другой коллекции:
var questionSchema = new Schema({
comments: [ObjectId]
})
Это будет работать хорошо, но вам нужно specify the model to populate для каждого запроса:
Question.findOne().populate('comments', Answer).exec(next)
Но я не уверен, что вы сможете заполнить comments
с использованием моделей Comment
и Answer
.
Другое решение для хранения 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 transfer function.
Наконец,, вы можете пересмотреть схему, чтобы хранить комментарии и ответы в одной коллекции, используя ту же модель мангуста для обоих.