2017-07-31 31 views
0

我一直在爲此工作數小時,無法找到解決方案。.populate()無法正常工作

我正在使用

學生模型學校目錄:一個課程模式

var mongoose = require("mongoose"); 


var studentSchema = new mongoose.Schema(
    { 
     name: String, 
     courses: [ 
      { 
       type: mongoose.Schema.Types.ObjectId, 
       ref: "Course" 
      } 
     ] 
    }); 

module.exports = mongoose.model("Student", studentSchema); 

和...

VAR貓鼬=要求( 「貓鼬」);

var courseSchema = new mongoose.Schema (
    { 
     name: String, 
     student: [ 
      { 
       id: 
       { 
        type: mongoose.Schema.Types.ObjectId, 
        ref: "Student" 
       }, 
       name: String 
      } 
     ] 
    } 
); 

module.exports = mongoose.model("Course", courseSchema); 

當我發現一個學生跑.populate ...它沒有學生中填充場值...

app.get("/students/:id", function(req, res){ 
    Student.findById(req.params.id).populate("courses").exec(function(err, foundStudent){ 
     if(err){ 
      console.log(err); 
     } else { 
      console.log(foundStudent); 
      res.render("students/show", {student: foundStudent}); 
     } 
    }); 
}); 

的執行console.log(foundStudent)將顯示.. 。

{ _id: 597e7a49c945ee13529d0871, 
    name: 'Collin DeSoto', 
    __v: 1, 
    courses: [ { _id: 597e7a4dc945ee13529d0872 } ] } 

後填充..任何想法?

+0

這可能是因爲您的實際文件不匹配其實您已經實現的模式。實際上'課程:[{_id:597e7a4dc945ee13529d0872}]'表明它沒有,因爲它應該是'courses:[597e7a4dc945ee13529d0872]',表示一個普通的ObjectId數組,這就是模式所說的。 –

+0

對不起,您所指的文件是指我的路線或模型本身? –

+0

文檔。如上面的'console.log()'輸出所示。它**不匹配**定義的模式。 –

回答

0

嘗試這種方式

User.find(match, function (err, users) { 
var opts = [{ path: 'company', match: { x: 1 }, select: 'name' }] 

    var promise = User.populate(users, opts); 
    promise.then(console.log).end(); 
}) 

和prefar此鏈接link