【问题标题】:Mongoose update array function not working猫鼬更新数组功能不起作用
【发布时间】:2016-11-03 07:46:36
【问题描述】:

我试图通过首先找到对象来更新我的值,然后将一个值推送到 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 语句中,但它得到了相同的结果。

有谁知道出了什么问题,我该如何解决?谢谢!

【问题讨论】:

    标签: node.js mongodb express mongoose promise


    【解决方案1】:

    代码混合了回调和承诺的使用。仅使用 Promise...

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

    【讨论】:

    • 其实我后来想通了。我没有返回 Skills.update(...),而是返回了 Skills.save()。它奏效了。
    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2018-03-03
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多