Mongoose更新数组功能无法正常工作

时间:2016-07-01 02:46:11

标签: node.js mongodb express mongoose promise

我正在尝试更新我的值,首先找到对象,然后将值推入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语句中,但它得到了相同的结果。

有谁知道什么是错的,我该如何解决这个问题?谢谢!

1 个答案:

答案 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 })