我会打破这个问题,以确保我解释得很好。
我的网络应用程序正在使用MEAN.js,在这种情况下,我在mongoose服务器端控制器中实现更新功能。 使用此架构:
客户端角度控制器代码工作正常,它发送给我正确的对象将其插入mongodb
我有一个由数据库中其他相关模式对象组成的自定义对象数组,它表示引用任务对象的更新列表,Taskstate对象中的更改以及发生的时间更新。
tupdates:[{
task:{
type: Schema.ObjectId,
ref: 'Task'
},
tstate:{
type: Schema.ObjectId,
ref: 'Tstate'
},
startedat: Date,
stoppedat: Date,
updatedby:{
type: Schema.ObjectId,
ref: 'User'
},
}]
我实现了一个循环遍历req对象中数组的函数,并为数组中的每个更新创建自定义对象,最后将其插入数据库中。 服务器端猫鼬控制器
var mongoose = require('mongoose'),
Job = mongoose.model('Job');
exports.update = function(req, res){
var job = req.job;
//check for updates
if(req.body.tupdates.length>0){
for (var j=0; j<req.body.tupdates.length; j++){
var theobj = req.body.tupdates[j];
var tupdate = ({
task : theobj.task._id,
tstate: theobj.tstate._id
});
job.tupdates.push(tupdate);
}
}
job.save(function(err){
if(err){
return res.status(400).send({
message: getErrorMessage(err)
});
}else{
res.json(job);
}
});
};enter code here
数据保存在数据库中,问题是如果在req数组中为每个更新插入了ObjectID I没有引用的附加_id值,如下所示:
db.jobs.find()
{ "_id" : ObjectId("56eff14d4b343c7f0a71f33c"), "creator" : ObjectId("55ddd115a2904424680263a0"), "title" : "Job1", "tupdates" : [ { "task" : ObjectId("567a9c4b90f3ccd10b0e7099"), "tstate" : ObjectId("5693bb0f804936f167fe9ec2"), *"_id" : ObjectId("56eff38e095a2fa41312d876")*} ]}
我添加了这些星标来指示带有ObjectId引用的_id值,它被添加到我在服务器端控制器中创建的对象中,每次我对同一个对象进行更新时问题仍然存在。它会在以后创建500个错误,并且必须省略才能使该函数在生产中正常工作,我很感激帮助,认为它是我需要进行的java脚本调整。
答案 0 :(得分:1)
默认情况下,如果数组元素是对象,则mongoose会将_id
字段添加到数组元素中。
只需将_id: false
添加到您的架构中:
tupdates:[{
_id: false,
task:{
type: Schema.ObjectId,
ref: 'Task'
},
tstate:{
type: Schema.ObjectId,
ref: 'Tstate'
},
startedat: Date,
stoppedat: Date,
updatedby:{
type: Schema.ObjectId,
ref: 'User'
},
}]