我在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'
答案 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
}
}
);