使用mongoose插入子文档时出现问题

时间:2016-09-21 13:04:29

标签: mongodb mongoose subdocument

我在node-express项目中使用mongoose创建了一个Enterprise数据库。现在我需要在企业数据库的enterprise_employee字段中添加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
};

抛出错误

  扔掉呃//未处理的'错误'事件         ^ TypeError:无法读取未定义

的属性'push'

2 个答案:

答案 0 :(得分:0)

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

试试这个:

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

答案 1 :(得分: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
        }
    }
);