mongoDB: cursor not found on server


查詢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使用完畢后,一定要關閉(游標最后都是這樣,規范操作)。搞不定會出現什么詭異的錯誤!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM