2016-12-19 6 views
0

Я не уверен, как заполнить поле questions в коллекции examBoard в следующем примере (я сделал свой пример достаточно сложным, чтобы я мог правильно понять, как он работает) ,MongoDB: Как заполнить встроенную ссылку

examBoard схема:

var topicSchema = new mongoose.Schema({ 
    name: String, 
    questions:[ 
     { 
      type:mongoose.Schema.Types.ObjectId, 
      ref:"question" 
     } 
    ], 
}); 

var moduleSchema = new mongoose.Schema({ 
    name: String, 
    topics: [topicSchema] 
}); 

var examBoardSchema = new mongoose.Schema({ 
    name: String, 
    modules: [moduleSchema] 
}); 

module.exports = mongoose.model("examBoard", examBoardSchema); 

вопрос схемы:

var partSchema = new mongoose.Schema({ 
    mark: Number, 
    content: String 
}); 

var questionSchema = new mongoose.Schema({ 
    content: String, 
    mark:Number, 
    methods:[[partSchema]] 
}); 

module.exports = mongoose.model("question", questionSchema); 

Как я думал, что я должен сделать это:

examBoard.find() 
    .populate 
    ({ 
     path:"modules.topics.questions", 
     model:"question" 
    }) 
    .exec(function(err,exam) 
    { 
     if(err) 
     { 
      console.log("Failed to populate"); 
     } 
     else 
     { 
      console.log("exam[0].modules[0].topcis[0].questions\n"+exam.modules[0].topcis[0].questions); 
     } 
    }); 

ответ

1

Попробуйте это:

Exam 
    .find() 
    .exec() 
    .then((exams) => { 
    // Populate questions 
    Exam 
     .populate(exams, { 
     path: 'modules.topics.questions', 
     model: 'question' 
     }) 
     .then((populatedExams) => { 
     // Do something with populated exams 
     }); 
    }); 
+0

Когда вы пишете «Экзамен», вы имеете в виду «examBoard» (поскольку это то, что вызывается при его экспорте) –

+0

Да, это так. 'Экзамен = mongoose.model (" examBoard ", examBoardSchema);' – willie17

+0

Спасибо, это работает. Есть ли какая-либо документация, связанная с тем, как вы это сделали, чтобы вы могли связать меня? В нижней части моего вопроса я поставил, как я изначально думал, что я должен это сделать, любая документация, объясняющая, как этот метод был неправильным, будет замечательным. –