使用猫鼬插入子文档时遇到问题

Trouble in inserting sub-documents using mongoose

我在 node-express 中使用 mongoose 创建了一个企业数据库 project.Now 我需要在企业数据库的 enterprise_employee 字段中添加员工子文档,但它会抛出错误。 以下代码片段是我的架构

var mongoose= require('mongoose');

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


module.exports={
 Enterprise:Enterprise
};

这段代码是添加员工子文档的路由

var mongoose = require('mongoose');

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

var addEmployee = function(req, res){

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

这是抛出的错误

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

我认为这是因为您的架构需要将 enterprise_employee 定义为数组。您必须明确告诉 Mongoose 它应该是 'Array' 类型。

试试这个:

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

似乎您需要的是一个更新操作,它使用 $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
        }
    }
);