2016-07-01 15 views
0

オブジェクトを見つけてから、値を2つの配列にプッシュしてから、元の値を更新して値を更新しようとしています。オブジェクトが見つかり、値を配列にプッシュすることができます。ただし、更新機能は、変更を検出することができないように思われるので、それはデータベース内の値を更新できませんでした。ここでMongoose更新配列関数が機能しません

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

私は2番目のif文の中にupdate関数を置こうとしましたが、同じ結果が得られます。

誰が何が間違っているのか分かりますが、これをどのように修正できますか?ありがとう!

答えて

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

私は実際に後で何かを考え出しました。 Skills.update(...)を返す代わりに、私はskill.save()を返しました。そしてそれは働いた。 – thousight

関連する問題