zoukankan      html  css  js  c++  java
  • MongoDB ,cursor not found异常

    查询mongoDB集合数据更新,数据有400w多。我一次用cursor(游标)取1w,处理更新。程序在某段时间运行中遍历游标时发生异常!
    DBCursor cursor = tabColl.find(queryObj).skip(startRow).limit(pageSize);

    完整异常信息:
    com.mongodb.MongoExceptionCursorNotFound:cursornotfoundonserveratcom.mongodb.DBApiLayerCursorNotFound:cursornotfoundonserveratcom.mongodb.DBApiLayerResult.init(DBApiLayer.java:379)
            at com.mongodb.DBApiLayerResult.advance(DBApiLayer.java:426)atcom.mongodb.DBApiLayerResult.advance(DBApiLayer.java:426)atcom.mongodb.DBApiLayerResult.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使用完毕后,一定要关闭(游标最后都是这样,规范操作)。搞不定会出现什么诡异的错误!
  • 相关阅读:
    反射入门
    把数据库表的信息添加到list集合里面
    简单的事务分析及使用
    java-web与jdbc 的使用
    菜鸟入门bootstrap
    如何彻底的卸载mysql
    发生系统错误 1067,解决方案
    纯js的购物车案例
    idea里面怎么把自己项目添加maven
    js入门
  • 原文地址:https://www.cnblogs.com/yiduobaozhiblog1/p/10172284.html
Copyright © 2011-2022 走看看