查找:update $push failed with “Resulting document after update is larger than 16777216”问题引起的原因
生活随笔
收集整理的這篇文章主要介紹了
查找:update $push failed with “Resulting document after update is larger than 16777216”问题引起的原因
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
具體錯誤
Caused by: com.mongodb.WriteConcernException: { "serverUsed" : "XX.XX.XX.XX:27017" , "ok" : 1 , "n" : 0 , "updatedExisting" : false , "err" : "Resulting document after update is larger than 16777216" , "code" : 17419}數據庫結構:mongodb保存的是,一條數據保存一輛車一天的定位信息,子列保存每10秒的位置信息
1.這個問題百度基本搜不到,上的谷歌,看了幾個之后知道是單個文檔超過了16M。
2.按照業務邏輯查詢當天的所有數據,并查詢每個文件的大小
//查看文件大小 var doc = db.vmsTrail.findOne({'date':'2019-09-24','imei':"868120219340130"}) print(Object.bsonsize(doc));發現最大的也不過5位數字。
3.查看代碼
3.1 調試
調試查看imei字段,當數據為"868120223261899"時,程序報錯。
數據庫中查詢:
代碼已經加了條件判斷
Integer count = vmsTrailRepository.countByImeiAndDate(imei,dateFormat); if(count == 0){//插入VmsTrail vmsTrail = new VmsTrail();vmsTrail.setImei(imei);vmsTrail.setCreateTime(new Date());vmsTrail.setUpdateTime(new Date());List<VmsPosition> list = new ArrayList<VmsPosition>();list.add(position);vmsTrail.setVmsPosition(list);vmsTrail.setDate(dateFormat);vmsTrailRepository.save(vmsTrail); }else {//更新追加點的軌跡數據mongoTemplate.updateMulti(new Query(new Criteria("imei").is(imei).and("date").is(dateFormat)),new Update().push("vmsPosition").each(position), VmsTrail.class); }一開始以為是Query().Update().push的問題,再次調試結果給的count是1,仔細檢查是dateformat字段為2019-08-06
3.2 數據庫查詢
var doc = db.vmsTrail.findOne({'date':'2019-08-06','imei':"868120223261899"}) print(Object.bsonsize(doc));結果:16777216找到問題所在,指定日期的這個文件超出了大小,應該是車輛GPS一直開著,并且沒有移動,導致的問題。
3.3 解決
優化業務邏輯,增加時間判斷,只有當天的數據才插入數據庫,避免文件一直增大
總結
以上是生活随笔為你收集整理的查找:update $push failed with “Resulting document after update is larger than 16777216”问题引起的原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录一个db2 中LISTAGG函数问题
- 下一篇: Beyond Compare 中文乱码解