2016-08-11 189 views
0

我有一個有序列表。我想在中間添加一個。我排序沒有問題,但修改似乎有點困難。主要目標是找到所有等於發送或更新的數字並更新的數字。我會在找到它們時更新它們,但我無法在循環中使用某個功能。更新貓鼬設置子文檔

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

這就是我如何得到它的工作。 (我還沒有用一個對象進行測試):

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(); 


     } 
    }); 
}