2017-04-09 49 views
0

我試圖填充貓鼬模型,我只希望返回的項目是與ID匹配的項目。貓鼬,填充ID是特定於項目參考

編輯更新:在下面的User模型中,我需要先通過id找到正確的用戶,然後對於task屬性,我需要填充它,其中projectID匹配req.params.ID。我怎樣才能填充projectID匹配req.params.ID的任務。我已經包括了我的全部用戶模型以及任務模式

//用戶模式

var UserSchema = new Schema({ 
    name: { 
    type: String, 
    trim: true, 
    required: "First Name is Required" 
    }, 
    username: { 
    type: String, 
    trim: true, 
    required: "Username is Required" 
    }, 
    skills: { 
    type: String, 
    trim : true 
    }, 
    avatar: { 
    type: String 
    }, 
    SQLid: { 
    type: Number 
    }, 
    userCreated: { 
    type: Date, 
    default: Date.now 
    }, 
    lastUpdated: { 
    type: Date 
    }, 
    adminTeams: [{ 
    type: Schema.Types.ObjectId, 
    ref: "Team" 
    }], 
    team: [{ 
    type: Schema.Types.ObjectId, 
    ref: "Team" 
    }], 
    task: [{ 
    projectID: { 
     type: String 
    }, 
    theTask: { 
     type: Schema.Types.ObjectId, 
     ref: "Task" 
    } 
    }] 
}); 

//任務模式

var TodoSchema = new Schema({ 
    task: { 
    type: String 
    } 
}); 

如何我只得到填充task在專案編號等於一個特定的ID。我試過

User.findById({ "_id": req.params.id }).populate({ path: 'task', match: {projectID: req.params.pID}, select: 'theTask' }) 
    .exec(function(err, docs){ 
    console.log("POPULATE TASKS DOCS", docs) 

但是這表明文檔是空的。

回答

0

您可以使用$elemMatch,它會爲您提供所有與您的projectId匹配並填充您的任務文檔的文檔。 因此,查詢將是 -

var query={ 
      task:{ 
        $elemMatch:{ 
          projectId: req.params.id 
           } 
        } 
      } 

User.find(query) 
.populate('theTask') 
.select('theTask') // use for getting selective data from document 
.exec(function(){}) //your callback fuction 

希望我回答你的問題。

謝謝。

+0

我想這一點,但它返回任務和項目的_id,而不是實際的任務。我已經包含了我的完整用戶模型和任務模型 – henhen

0

在您的任務schma中,您已將任務類型的類型保留爲string,並且在您的用戶架構中,任務包含任務和任務的參考,其Self僅爲string。這就是爲什麼沒有被填充了..

因此更改任務架構(保持簡單) -

var Task= new Schema({ 
    name :string 
    }); 

填充需要refrence Id以獲取整個文檔