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使用完毕后,一定要关闭(游标最后都是这样,规范操作)。搞不定会出现什么诡异的错误!

时间: 2024-11-16 18:35:23

mongoDB: cursor not found on server的相关文章

com.mongodb.MongoException$CursorNotFound: cursor not found on server异常处理

java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.mongodb.MongoException$CursorNotFound: cursor not found on server at com.mongodb.DBApiLayer$Result.init(DBApiLayer.java:379) at com.mongodb.DBApiLayer$Result._ad

MongoDB整理笔记の新增Shard Server

1.启动一个新Shard Server 进程 [[email protected] ~]# mkdir /data/shard/s2 [[email protected] ~]# /Apps/mongo/bin/mongod --shardsvr --port 20002 --dbpath /data/shard/s2 --fork --logpath /data/shard/log/s2.log --directoryperdb all output going to: /data/shard

解决com.mongodb.MongoException$CursorNotFound: cursor 0 not found on server

背景 经常需要执行脚本调用Java程序读取mongodb中数据,本来是转为后台进程.偶尔看看日志的简单任务.今天发现程序抛出异常“com.mongodb.MongoException$CursorNotFound: cursor 0 not found on server”.一开始没在意,重新执行也可以继续跑,但是过一段时间又抛出同样错误,看来要战斗了. 分析 在mogondb.org官网,我找到了同样的问题,这是一个2013年就发现并解决的问题,官方回应这一BUG,并且已经在版本(2.11.0

MongoDB for Java入门

Introduction This page is a brief overview of working with the MongoDB Java Driver. For more information about the Java API, please refer to the online API Documentation for Java Driver. A Quick Tour Using the Java driver is very simple. First, be su

MongoDB 搭建副本集

副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本.通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移. 一,MongoDB版本和环境 在Windows上创建包含三个节点的副本集,使用的环境: 数据库:MongoDB 版本 3.2.9 Server

MongoDB

MongoDB 副本集(Replica Set)是一组MongoDB实例组成的集群,由一个主(Primary)服务器和多个备份(Secondary)服务器构成.通过Replication,将数据的更新由Primary推送到其他实例上,在一定的延迟之后,每个MongoDB实例维护相同的数据集副本.通过维护冗余的数据库副本,能够实现数据的异地备份,读写分离和自动故障转移. 一,MongoDB版本和环境 在Windows上创建包含三个节点的副本集,使用的环境: 数据库:MongoDB 版本 3.2.9

MongoDB 高可用集群搭建(3.4)

  一.架构概况192.168.56.101192.168.56.102192.168.56.103OS为centos 7.2 架构图: 规划5个组件对应的端口号,由于每台机器均需要同时部署 mongos.config server .shard1.shard2.shard3,所以需要用端口进行区分.       端口可以自由定义,本架构中 mongos为 20000, config server 为 21000, shard1为 22001 , shard2为22002, shard3为220

mongodb数据库安装 & 设置管理员密码(单独mongo,无副本集)

##初始化系统环境,参考文档:服务器系统环境初始化,Centos7系统 #mongodb下载安装 mkdir -p /server/src /server/logs groupadd mongod useradd -s /sbin/nologin -g mongod mongod   cat /etc/passwd |grep mongo cd /server/src    ##安装mongodb 3.0.7版本,若需要其他版本,官网获取下载https://fastdl.mongodb.org/

[翻译]MongoDb 架构(MongoDb Architecture)

转自:http://blog.dufei.cc/index.php/archives/25/ NOSQL最近成为了一个炙手可热的话题(作者发表在2012年,话说对于现在来说,NOSQL已经如火如荼了).大规模架构的web服务开发中对于高扩展性和半结构化数据的要求推动着数据库往NOSQL方向转变.最近几年已经有了不少NOSQL数据库解决方案.我在过去的blog中(不是我的blog,作者blog挺卡的)已经介绍过基于分布式系统理论的NOSQL,同时也介绍了一些挺好的产品,比如CouchDB和Cass