Проблема со вставкой вложенных документов с использованием мангуста

Я создал корпоративную базу данных, используя mongoose в проекте node-express. Теперь мне нужно добавить поддокумент сотрудника в поле 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
};

Это выброшенная ошибка

бросать; // Необработанное событие «ошибка» ^ TypeError: Невозможно прочитать свойство «push» неопределенного


person akila arasan    schedule 21.09.2016    source источник


Ответы (2)


Похоже, вам нужна операция обновления, которая использует оператор $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
        }
    }
);
person chridam    schedule 21.09.2016

Я думаю, это потому, что ваша схема должна определять enterprise_employee как массив. Вы должны явно указать Mongoose, что это должен быть тип «массив».

Попробуй это:

enterprise_employee: {
    type: Array,
    fields: [
        {
            employee_id: String,
            employee_name: String
        }
    ]
}
person dyouberg    schedule 21.09.2016
comment
Ошибка не устранена. Можете ли вы проверить меня, это правильный способ отправки сведений? {enterprise_id :2, employee_id: 1 ,employee_name : akila} - person akila arasan; 21.09.2016
comment
В вашем случае employee_id и enterprise_id являются числами, а не строками, поскольку вокруг них нет кавычек. Также вам следует попробовать предложение chridam, это может быть более чистый способ делать то, что вы пытаетесь сделать. - person dyouberg; 21.09.2016