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)