搜尋

首頁  >  問答  >  主體

mongodb 執行條數不確定問題

var all = db.getCollection('logging').find({"Properties.EnterpriseId":{$ne:null},"Properties.AccountId":null}).sort({"Date":-1});
all.forEach(
    function(value,index,arr){
       if(value.Properties.AccountId == null){
           db.logging.update({'_id':ObjectId(value._id.str)},{$set:{'Properties.AccountId':value.Properties.EnterpriseId}}, false, true)
       }
    }
);

以上程式碼一次只更新100條,有時候只更新幾百條,20萬條的資料一次更新不完,這是為什麼呢?

为情所困为情所困2742 天前775

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-05-17 10:03:33

    有幾點不是十分懂:

    1. 看起來像是shell腳本對嗎?

    2. 既然條件中有{"Properties.AccountId":null},为什么还要if(value.Properties.AccountId == null)?或者你想判断的是AccountId === null?

    3. update方法的详细说明可以查看文档。文档中的定义是:db.collection.update(query, update, options),所以不知道最后的falsetrue本意是想查什么?upsertmulti?這樣的話應該是:

      db.logging.update({'_id':ObjectId(value._id.str)},{$set:{'Properties.AccountId':value.Properties.EnterpriseId}}, {upsert: false, multi: true})

      不過你用的是_id条件应该也没有multi什麼事。嗯,還是清楚地說下你的本意比較好,我就不猜測了。

    4. 你用的是循環的更新,而每一次循環都是帶條件的,如果要更新20萬條的話,這些條件是不是能覆蓋到完整的20萬條數據?

    回覆
    0
  • 取消回覆