2016-07-01 8 views
0

개체를 찾아 값을 2 개로 밀어 넣은 다음 원래 값을 업데이트하여 값을 업데이트하려고합니다. 객체를 찾고 값을 배열에 푸시 할 수 있습니다. 그러나, 업데이트 기능은 따라서 데이터베이스의 값을 업데이트 할 수 없습니다, 변경 사항을 감지하지 못할 것 같다 :몽구스 업데이트 배열 함수가 작동하지 않습니다.

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 
     }) 
    }) 
}) 
: 여기
{ 
    "ok": 1, 
    "nModified": 0, 
    "n": 0, 
    "lastOp": "0", 
    "electionId": "576dec4e2c52240b7a5bca5e" 
} 

는 값을 업데이트하려고 내 기능입니다

두 번째 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

관련 문제