Açıkladığımdan emin olmak için sorunu çözeceğim.Özel bir nesne için karmaşık bir şemaya bir Mongoose PUT gerçekleştirilmesi sorunu
Web uygulamam MEAN.js kullanıyor, bu durumda mongoose sunucu tarafı denetleyicisinde bir güncelleme işlevi uyguluyorum. Bu şema kullanılarak:
istemci tarafında açılı kontrol kod iyi çalışmaktadır ve bana MongoDB takın doğru nesne gönderiyor
Özel bir nesnenin bir dizi diğer ilgili şema nesneleri kapsayan sahip veritabanı, bir görev nesnesine başvuru yapan güncellemelerin bir listesini, Taskstate nesnesindeki bir değişikliği ve gerçekleşen zaman güncellemelerini ifade eder.
tupdates:[{
task:{
type: Schema.ObjectId,
ref: 'Task'
},
tstate:{
type: Schema.ObjectId,
ref: 'Tstate'
},
startedat: Date,
stoppedat: Date,
updatedby:{
type: Schema.ObjectId,
ref: 'User'
},
}]
I Tlp nesnesinde dizisi üzerinde döngü olur, ve dizideki her güncelleştirme için özel nesneler oluşturur, ve son olarak veritabanında ekler bir fonksiyonu uygulanmaktadır. Veri veri tabanında kalıcıdır
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
sunucu tarafı firavunfaresi kontrol, sorun aşağıdaki gibi NesneKimliği ile ek _ID değeri I Tlp dizideki her güncelleştirme için sokulur için bir referans sahip olmasıdır:
db.jobs.find()
{ "_id" : ObjectId("56eff14d4b343c7f0a71f33c"), "creator" : ObjectId("55ddd115a2904424680263a0"), "title" : "Job1", "tupdates" : [ { "task" : ObjectId("567a9c4b90f3ccd10b0e7099"), "tstate" : ObjectId("5693bb0f804936f167fe9ec2"), *"_id" : ObjectId("56eff38e095a2fa41312d876")*} ]}
Sunucu tarafı denetleyicisinde oluşturduğum nesneye eklenen ObjectID başvurusu ile _id değerini belirtmek için bu yıldızları ekledim, her defasında aynı nesne üzerinde bir güncelleştirme yaptığımda sorun devam ediyor. Daha sonra 500 hata oluşturur ve üretimde iyi çalışması için ihmal edilmelidir, yardım etmeyi takdir ediyorum, bunu yapmam gereken bir java betiği olduğunu düşünüyorum.
Thats tam olarak, teşekkürler Tom –
onu test sonra, ben yeni bir güncelleme PUT ilk kez çalışır, ikinci kez bir null ekler –
aşağıdaki gibi bir null ekler ilk güncelleştirme gerçekleştikten sonra aşağıdaki gibi otomatik olarak {"_id": ObjectId ("56f053cd7e4ca6602e208d91"), "title": "job1", "tupdates": [{"task": ObjectId ("567a9c6690f3ccd10b0e709a"), "tstate ": ObjectId (" 5693bb0f804936f167fe9ec2 ")}, null, {" task ": ObjectId (" 567a9c4b90f3ccd10b0e7099 ")," tstate ": ObjectId (" 5693bb0f804936f167fe9ec2 ")}]," task ": [ObjectId (" 567a9c4b90f3ccd10b0e7099 "), ObjectId ("567a9c6690f3ccd10b0e709a"), ObjectId ("567) a9c7f90f3ccd10b0e709b ")]} –