2016-08-11 6 views
0

私は順序リストを持っています。真ん中のリストに1つ追加したいと思います。私は問題なくソートしていますが、変更はもう少し難しいようです。主な目標は、送信されたものと等しいものをすべて見つけて更新することです。私はそれらを見つけるように私はそれらを更新するだろうが、私はループ内の関数を持つことはできません。mongoose setサブ文書を更新します。

function updateNumbersAfterArticles(searchableid, number){ 
    var m_searchableid = new ObjectId(searchableid); 
    m_Kbase_data.findOne({_id : m_searchableid}, function(err, kbase_data){ 
    if (kbase_data.Steps.length === 1){ 
     var updated_step = new m_KbaseScript_schema({step: kbase_data.Steps[0].step + 1, description : kbase_data.Steps[0].description, image : kbase_data.Steps[0].image}); 
     m_Kbase_data.update({_id : m_searchableid, 'Step._id' : kbase_data.Steps[0]._id }, 
       {$set: { "Steps.$": updated_step }}, 
       function(err, updateRows){ 
        //if (err) res.status(500); 
        console.log(updateRows); 
       } 
      ); 
     return; 
    } 
    else{ 
     var updated_step2 = []; 
     for (var i = 1; i < kbase_data.Steps.length; i++) { 
      if (kbase_data.Steps[i].step >= number){ 
       console.log("pushed"); 
       updated_step2.push(new m_KbaseScript_schema({step: kbase_data.Steps[i].step + 1, description : kbase_data.Steps[i].description, image : kbase_data.Steps[i].image})); 
      } 
     } 
     console.log(updated_step2); 
     m_Kbase_data.update({_id : m_searchableid, }, 
       {$set: { "Steps.$": updated_step2 }}, 
       function(err, updateRows){ 
        //if (err) res.status(500); 
        console.log(updateRows); 
       } 
      ); 
    } 
}); 

}

私はそれを実行すると、私はプッシュのすべてを見ることができます。彼らは正しく更新されるようです。しかし、私はデータベースを更新するつもりはありません。

答えて

0

これは私がそれを動作させる方法です。 (まだ1つのオブジェクトでテストしていません):

function updateNumbersAfterArticles(searchableid, number){ 
    var m_searchableid = new ObjectId(searchableid); 
    m_Kbase_data.findOne({_id : m_searchableid}, function(err, kbase_data){ 

     if (kbase_data.Steps.length === 1){ 
      var updated_step = new m_KbaseScript_schema({step: kbase_data.Steps[0].step + 1, description : kbase_data.Steps[0].description, image : kbase_data.Steps[0].image}); 
      m_Kbase_data.update({_id : m_searchableid, 'Step._id' : kbase_data.Steps[0]._id }, 
        {$set: { "Steps.$": updated_step }}, 
        function(err, updateRows){ 
         //if (err) res.status(500); 
         console.log(updateRows); 
        } 
       ); 
      return; 
     } 
     else{ 
      var updated_step2 = kbase_data.Steps; 
      for (var i = 1; i < kbase_data.Steps.length; i++) { 
       if (kbase_data.Steps[i].step >= number){ 
        //console.log("pushed"); 
        kbase_data.Steps[i].step = kbase_data.Steps[i].step + 1; 
        kbase_data.markModified('Steps'); 
       } 
      } 
      kbase_data.save(); 


     } 
    }); 
} 
関連する問題