Mongodb 可以用不同的方法分离嵌套的填充调用吗?
假设我有以下模式:Mongodb 可以用不同的方法分离嵌套的填充调用吗?,mongodb,mongoose,mongoose-populate,Mongodb,Mongoose,Mongoose Populate,假设我有以下模式: const QuestionSchema = new mongoose.Schema({ number: String, question: { type: String, required: true }, submitter: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } }); const QuizSchema = new mongoose.Schema({ name: {
const QuestionSchema = new mongoose.Schema({
number: String,
question: { type: String, required: true },
submitter: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});
const QuizSchema = new mongoose.Schema({
name: { type: String, required: true },
questions: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Question' }]
});
对于特定的测验,我知道如果我想填充问题,包括它们的提交者,我会这样做:
quiz.populate({
path: 'questions',
model: mongoose.model('Question'),
options: {
sort: { number: 1 }
},
populate: {
path: 'questions.submitter',
model: mongoose.model('User')
}
}).exec(cb)
现在可以在不同的方法中分离填充调用了吗
例如,我想做一些像
QuizSchema.methods.withQuestions = function () {
return this.populate({
path: 'questions',
model: this.model('Question'),
options: {
sort: { number: 1 }
}
});
};
QuizSchema.methods.withSubmitter = function () {
return this.populate({
path: 'questions.submitter',
model: this.model('User')
});
};
为了做
quiz.withQuestions().withSubmitter().execPopulate().then(cb)
不幸的是,当我尝试这样做时,提交者
没有被填充。不是以您尝试的方式。“嵌套”调用实际上是“嵌套”的,而不是“链接”的,这是有原因的。这是因为在查询
对象链中,.populate()
实际驻留的位置,只有在初始模型上的实际查询调用了实际结果之后,才会调用它。通过启用调试,您可以清楚地看到这一点mongoose.set('debug',true)
不是您尝试的方式。“嵌套”调用实际上是“嵌套”的,而不是“链接”的,这是有原因的。这是因为在查询
对象链中,.populate()
实际驻留的位置,只有在初始模型上的实际查询调用了实际结果之后,才会调用它。通过启用调试,您可以清楚地看到这一点mongoose.set('debug',true)