2017-10-16 12 views
0

配列内のオブジェクト値を更新しようとしています。私はメソッドを実行し、私が望む配列内の要素を検索し、200を返します。しかし、私が別の要求をした後、値は元の値に戻ります(保存しません)。ノードjs保存方法PUT

{ 
     "_id" : "1", 
     "username" : "a", 
     "elements" : [{"_id": "22", "name":"bb"}, {"_id":"33", "name": "cc"}] 
    } 

、これは私が私が間違っているのかわからない私の方法

update = function(req, res) { 
     User.findById(req.params.id, function (err, user) { 
     if (!user) { 
      res.send(404, 'User not found'); 
     } 
     else{ 
      var array = user.elements; 
      for (var i = 0; i < array.length; i++) { 
       if (array[i]._id == "22") { 
        result = array[i]; 
        if (req.body.name != null) result.name = req.body.name; 
        result.save(function(err) { 
         if(!err) { 
          console.log('Updated'); 
         } 
         else { 
          console.log('ERROR: ' + err); 
         } 
         res.send(result); 
        }); 
        break; 
       } 
      } 
     } 
     }); 
    } 

です:

このすべての最初のスキーマです。私はすべてを簡素化していますが、問題はその方法にあると思います。

+0

あなたが唯一の ''一度res.send(結果を)実行する必要があります。 [Promise.all](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)または[async.js](http://caolan.github。 io/async /)特に[async.mapSeries](http://caolan.github.io/async/docs.html#mapSeries)を使用してすべての要素を更新してから、res.send()を一度実行します。 – Mikey

+0

また、あなたのスキーマで質問を編集する必要があります。 – Mikey

+0

私はres.sendが一度@Mikeyと呼ばれると信じていますが、インデントするのは難しいですが。 –

答えて

1

あなたはこのようuserオブジェクトとresultを保存する必要があります。

update = function(req, res) { 
      User.findById(req.params.id, function (err, user) { 
      if (!user) { 
       res.send(404, 'User not found'); 
      } 
      else{ 
       var array = user.elements; 
       for (var i = 0; i < array.length; i++) { 
        if (array[i]._id == "22") { 
         result = array[i]; 
         if (req.body.name != null) result.name = req.body.name; 

         break; 
        } 
       } 
       user.save(function(err) { 
          if(!err) { 
           console.log('Updated'); 
          } 
          else { 
           console.log('ERROR: ' + err); 
          } 
          res.send(user); 
         }); 
      } 
      }); 

     } 
+0

あなたはすでに解決策を見つけました。私は遅かった:D –

+0

ありがとう!!!! –

関連する問題