我正在尝试更新我的值,首先找到对象,然后将值推入2个数组,然后更新原始值。可以找到该对象,并且可以将值推送到数组中。但是,更新功能似乎无法检测到更改,因此无法更新数据库中的值:
{
"ok": 1,
"nModified": 0,
"n": 0,
"lastOp": "0",
"electionId": "576dec4e2c52240b7a5bca5e"
}
这是我的函数,它尝试更新值:
Skills.findOne({ skillsCat: req.body.skillsCat }, (err, skills)=> {
if (err) {
res.send(err)
return
}
if (skills) {
skills.skillName.push(req.body.skillName)
skills.percent.push(req.body.percent)
skills.markModified('skillName')
skills.markModified('percent')
return skills
}
})
.then(skills=> {
Skills.update( { _id: req.body._id }, { $set: skills }, (err, updated)=> {
if (err) {
res.send(err)
return
}
res.json({
message: 'Skill info updated successfully',
'database response': updated
})
})
})
我已经尝试将更新函数放在第二个if语句中,但它得到了相同的结果。
有谁知道什么是错的,我该如何解决这个问题?谢谢!
答案 0 :(得分:1)
代码混合使用回调和承诺。仅使用承诺...
Skills.findOne({ skillsCat: req.body.skillsCat }).exec().then(skills => {
if (skills) {
// ...
return Skills.update({ _id: req.body._id }, { $set: skills });
} else {
return null; // or, if this is an error in your app, throw it
}
})
.then(skills=> {
if (!skills) { // handle not found here }
else {
res.json({
message: 'Skill info updated successfully',
'database response': updated
});
}
})
.catch(err => { // handle errors here })