2016-09-21 61 views
1

我在node-express項目中使用mongoose創建了一個企業數據庫。現在我需要在企業數據庫的enterprise_employee字段中添加員工子文檔,但會引發錯誤。 下面的代碼片段是我的架構在使用貓鼬插入子文檔時遇到困難

var mongoose= require('mongoose'); 
 

 
var Enterprise= new mongoose.Schema({ 
 
    enterprise_id:{ 
 
\t \t type:String 
 
\t }, 
 
\t enterprise_name:{ 
 
\t \t type:String 
 
\t }, 
 
\t enterprise_email:{ 
 
\t \t type:String 
 
\t }, 
 
\t enterprise_employee: [{employee_id:Number, employee_name:String}] 
 
}); 
 

 

 
module.exports={ 
 
\t Enterprise:Enterprise 
 
};

此代碼段是用於增加員工的子文檔

var mongoose = require('mongoose'); 
 

 
var Enterprise = mongoose.model('Enterprise_gpy'); 
 

 
var addEmployee = function(req, res){ 
 

 
\t Enterprise.findOne({"enterprise_id":req.body.enterprise_id},function(err, res){ 
 
\t \t if(err){ 
 
\t \t \t console.log('NO SUCH ORGANISATION'); 
 
\t \t \t res.json(err); 
 
\t \t } else { 
 
\t \t \t Enterprise.enterprise_employee.push({ 
 
\t \t \t \t "employee_id": req.body.employee_id, 
 
\t \t \t \t "employee_name":req.body.employee_name 
 
\t \t \t }); 
 
\t \t } 
 
\t }); 
 
} 
 
module.exports={ 
 
\t addEmployee:addEmployee 
 
};

此錯誤拋出

路線

throw er; // Unhandled 'error' event ^TypeError: Cannot read property 'push' of undefined

回答

0

好像你需要的是一個使用$push運營商的元素添加到陣列領域的更新操作。下面的例子說明了這一點:

Enterprise.findOneAndUpdate(
    { "enterprise_id": req.body.enterprise_id }, 
    { 
     "$push": { 
      "enterprise_employee": { 
       "employee_id": req.body.employee_id, 
       "employee_name":req.body.employee_name 
      } 
     } 
    }, 
    { "new": true }, // return the modified document 
    function(err, enterprise) { 
     if (err) { 
      console.log('NO SUCH ORGANISATION'); 
      res.json(err); 
     } else { 
      console.log(enterprise); // modified document 
     } 
    } 
); 
0

我認爲這是因爲您的模式需要將enterprise_employee定義爲數組。你必須明確告訴Mongoose它應該是一個'數組'類型。

試試這個:

enterprise_employee: { 
    type: Array, 
    fields: [ 
     { 
      employee_id: String, 
      employee_name: String 
     } 
    ] 
} 
+0

錯誤persists.Can你回顧我這是在發送信息的正確方法嗎?{「enterprise_id」:2,「僱員標識」:1,「employee_name」:「阿基拉」} – Idlliofrio

+0

在你的情況下,employee_id和enterprise_id是數字而不是字符串,因爲它們周圍沒有引號。 你也應該嘗試chridam的建議,它可能是一個乾淨的方式做你想做的事情。 – dyouberg