標籤:style io color ar os 使用 java sp strong
查詢mongoDB集合資料更新,資料有400w多。我一次用cursor(遊標)取1w,處理更新。程式在某段時間運行中遍曆遊標時發生異常!DBCursor cursor = tabColl.find(queryObj).skip(startRow).limit(pageSize);
完整異常資訊:
com.mongodb.MongoException$CursorNotFound: cursor not found on server
at com.mongodb.DBApiLayer$Result.init(DBApiLayer.java:379)
at com.mongodb.DBApiLayer$Result._advance(DBApiLayer.java:426)
at com.mongodb.DBApiLayer$Result.hasNext(DBApiLayer.java:408)
at com.mongodb.DBCursor._hasNext(DBCursor.java:495)
at com.mongodb.DBCursor.hasNext(DBCursor.java:515)
at com.bsdwwd.boss.util.deal.UpdateTUserMongoByInfo.deal(UpdateTUserMongoByInfo.java:106)
at com.bsdwwd.boss.util.deal.UpdateTUserMongoByInfo.detailDeal(UpdateTUserMongoByInfo.java:53)
at com.bsdwwd.boss.util.process.AbstractProcess.run(AbstractProcess.java:181)
at java.lang.Thread.run(Thread.java:662)
原因是取到的cursor對象預設是有時間限制的,時間過後cursor就沒有了(我猜想應該被mongoDB背景程式回收了)
解決方案: 在擷取到cursor對象後設定下 cursor.addOption(Bytes.QUERYOPTION_NOTIMEOUT);//預設遊標開啟有時間限制,設定成無時間限制 注意: cursor使用完畢後,一定要關閉(遊標最後都是這樣,規範操作)。搞不定會出現什麼詭異的錯誤!
mongoDB: cursor not found on server