【发布时间】:2011-03-29 11:53:55
【问题描述】:
我正在使用 MongoDb,在从数据库读取记录时遇到问题。 我能够将它们放在游标中,但是当我尝试使用从游标中获取记录时 cursor.hasNext() 它给了我以下异常:
com.mongodb.MongoInternalException: couldn't get next element
at com.mongodb.DBCursor.hasNext(DBCursor.java:459)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:146)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at org.bson.io.Bits.readFully(Bits.java:35)
at org.bson.io.Bits.readFully(Bits.java:28)
at com.mongodb.Response.<init>(Response.java:35)
at com.mongodb.DBPort.go(DBPort.java:101)
at com.mongodb.DBPort.go(DBPort.java:66)
at com.mongodb.DBPort.call(DBPort.java:56)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:211)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:220)
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:220)
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:266)
at com.mongodb.DBCursor._check(DBCursor.java:309)
at com.mongodb.DBCursor._hasNext(DBCursor.java:431)
at com.mongodb.DBCursor.hasNext(DBCursor.java:456)
也许我正面临这个问题,因为我的数据不断增加,所以我在游标中获得了更多的记录。我正在访问的数据库也在远程机器上。
请在这方面需要帮助。
谢谢!
【问题讨论】:
-
您可以检索任何记录吗?您是否有可能导致此问题的防火墙规则?您是否计算过超时时间?
-
您可以粘贴您正在使用的生成此错误的代码吗?它与标准教程相比如何?您是在此错误发生之前获取一些文档,还是在在您取回第一个文档之前获取这些文档?
-
你能确定你和你的服务器之间没有防火墙或类似的东西吗?这看起来像是一个网络端口由于过度激进的网络成员超时而关闭的情况。
-
是的,我能够检索记录,所以这可能不是与防火墙相关的问题,因为如果是这样,我根本就不会得到记录。此外,我已将套接字超时设置为 2000 毫秒,将连接超时设置为 2000 毫秒。会不会因为java驱动和mongodb版本兼容而出现这个问题?(我用的是mongodb 1.6.5,mongo+java驱动版本是2.4)
标签: java mongodb mongo-java