我使用Node.JS作为后端,Angular4作为FrontEnd使用。
我想从某行的angular更改为findOneAndUpdate
的数组这是我的模特
subLot: [{
room: String,
beforePicture: String,
afterPicture: String,
Realisations: [{
realisationName : String,
specialtyName : String,
pu: Number,
unite: String,
quantite: Number,
startDate: Date, // Attribute to Update
endDate: Date, // Attribute to Update
}]
}]
更改将在" startDate" "结束日期"其中:
(let body = req.body.subLot)subLot [x] .room == body [x] .room&& subLot [x] .Realisations [y] .realisationName == 体[X] .Realisations [Y] .realisationName
这是我在Node.JS中的功能
var lot = Devis.
findOneAndUpdate({ "project": req.params.projectId }, { "$set": { "subLot": req.body.subLot } }).
exec(function (err, lot) {
if (err) {
res.status(500).send(err);
return;
}
res.status(200).json({ lot: lot, success: true });
return;
})
答案 0 :(得分:0)
您正在做的是更新阵列字段。但你想要做的是更新一个数组字段项,subLot是一个数组,并且你想更新该数组中的一个值而不是整个数组。
我想你可以做的是根据项目ID获取devis,然后找到适当的批次进行更新。如下面的代码所示。
Devis.
findOne({ "project": req.params.projectId }).
exec(function (err, devis) {
if (err) {
res.status(500).send(err);
return;
}
var lottoUpdate = devis.subLot.find(function(l){ //using Array.find
return l._id === lot._id;
});
lottoUpdate = lot; // update reference of found lot object to the lot object posted from angular.
devis.save(function(err){
if (err) {
res.status(500).send(err);
return;
}
res.status(200).json({ lot: lot, success: true });
});
return;
})
另外我建议你使用promises而不是回调。