mongodb 執行條數不確定問題
为情所困
为情所困 2017-05-17 10:01:33
0
1
738
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萬條的資料一次更新不完,這是為什麼呢?

为情所困
为情所困

全部回覆(1)
左手右手慢动作

有幾點不是十分懂:

  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萬條數據?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!