我的任务是使用mongoose
修改现有(大型)node.js网站。
架构有Question
,链接到Answer
数组,如下所示:
var QuestionSchema = mongoose.Schema({
text: { type: String },
...
answers: [{type: mongoose.Schema.Types.ObjectId, ref: 'Answer'}],
...
});
var AnswerSchema = mongoose.Schema({
text: { type: String },
....
question: {
type: mongoose.Schema.ObjectId,
ref: Question
},
...
});
var Question = mongoose.model('Story', QuestionSchema);
var Answer = mongoose.model('Answer', AnswerSchema);
我无法找到代码中使用的populate
方法的任何实例,但Question
文档的查询始终返回完整answer
个对象的数组,而不是只是对象id。这就是我们所需要的。
我现在必须向reaction
添加answer
个对象数组。我使用了以下内容:
var Answer = mongoose.model('Answer', AnswerSchema);
var ReactionSchema = mongoose.Schema({
text: { type: String },
....
answer: {
type: mongoose.Schema.ObjectId,
ref: Answer,
//required: true
},
...
});
然后我将以下内容添加到Answer
架构中:
reactions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Reaction'}]
//where var Reaction = mongoose.model('Reaction', ReactionSchema);
我可以保存reaction
个对象,当我检查answer
的数据库内容时,reaction
个对象的类型和形式与answer
个对象相同在question
。
但是,当返回question
文档时,answer.reaction
的每个元素只包含reaction
的对象ID,而不是完整的reaction
对象。我省略了什么或如何根据ref
类型进行查询以执行连接?
mongodb版本是3.2.9,而mongoose是4.0.4。
答案 0 :(得分:0)
您如何查询问题?这是您解决嵌套引用的方法:
Question.findById(id).populate({
path: 'answer',
model: 'Answer',
populate: {
path: 'reaction',
model: 'Reaction'
}
}).exec(function(err, data){});
以下是mongoose docs的链接:Mongoose Docs Deep Populate