populate 是隐含的吗?它可以深入多少层?
Is populate implicit and how many levels deep can it go?
我的任务是使用 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
文档的查询总是 return 包含完整的 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
文档被 return 编辑时,answer.reaction
的每个元素仅包含 reaction
的对象 ID,而不是完整的 reaction
目的。我遗漏了什么或如何进行查询以根据 ref
类型执行连接?
mongodb版本是3.2.9,mongoose是4.0.4。
如何查询问题?这是解决嵌套引用的方法:
Question.findById(id).populate({
path: 'answer',
model: 'Answer',
populate: {
path: 'reaction',
model: 'Reaction'
}
}).exec(function(err, data){});
这是 mongoose 文档的 link:Mongoose Docs Deep Populate
我的任务是使用 mongoose
.
该架构有一个 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
文档的查询总是 return 包含完整的 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
文档被 return 编辑时,answer.reaction
的每个元素仅包含 reaction
的对象 ID,而不是完整的 reaction
目的。我遗漏了什么或如何进行查询以根据 ref
类型执行连接?
mongodb版本是3.2.9,mongoose是4.0.4。
如何查询问题?这是解决嵌套引用的方法:
Question.findById(id).populate({
path: 'answer',
model: 'Answer',
populate: {
path: 'reaction',
model: 'Reaction'
}
}).exec(function(err, data){});
这是 mongoose 文档的 link:Mongoose Docs Deep Populate