使用猫鼬插入子文档时遇到问题
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
}
}
);
我在 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
}
}
);