2016-09-21 6 views
1

ノードエクスプレスプロジェクトでmongooseを使用してエンタープライズデータベースを作成しました。エンタープライズデータベースのenterprise_employeeフィールドにemployeeサブ文書を追加する必要がありますが、エラーが発生します。 次のコードスニペットは、このコードスニペットは、このエラーはmongooseを使用してサブ文書を挿入する際の問題

を投げ

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 
 
};

従業員のサブ文書を追加するためのルートである私のスキーマ

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 
 
};

です

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

答えて

0

を使用すると、配列フィールドに要素を追加する$push演算子を使用して、更新操作で必要なもののように思えます。 ?あなたは私を見直すpersists.Can

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に 'Array'型であるべきことを伝える必要があります。

これを試してみてください:

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

エラーが、これは詳細を送信する正しい方法です:次の例では、この実証{ "enterprise_id":2、 "EMPLOYEE_ID":1、 "EMPLOYEE_NAME": "akila"} – Idlliofrio

+0

あなたのケースでは、employee_idとenterprise_idは、文字列ではなく数字です。その周りに引用符がないためです。 また、あなたは何をしようとしているのよりクリーンな方法かもしれないchridamの提案を試してください。 – dyouberg

関連する問題