java dbcursor_mongoDB:游标notimeout设置在java客户端中不起作用

我在

java中为dbcursor设置了’notimeout’选项:

BasicDBObject nearbyQueries = new BasicDBObject("$gt", 0)

.append("$lte", 2);

DBCursor trueClassInstances = locationsCollection.find(new BasicDBObject("distanceFromHotel", nearbyQueries)).addOption(Bytes.QUERYOPTION_NOTIMEOUT).limit(100000);

double counter = 0;

int currentPresent = 0;

for (DBObject instance : trueClassInstances) {

...

}

即使我设置了此选项,也会抛出此异常:

Exception in thread "main" com.mongodb.MongoCursorNotFoundException: Query failed with error code -5 and error message 'Cursor 1876954464377 not found on server XXXXXX:27017' on server XXXXXXXX:27017

at com.mongodb.connection.GetMoreProtocol.receiveMessage(GetMoreProtocol.java:115)

at com.mongodb.connection.GetMoreProtocol.execute(GetMoreProtocol.java:68)

at com.mongodb.connection.GetMoreProtocol.execute(GetMoreProtocol.java:37)

at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:155)

at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:219)

at com.mongodb.connection.DefaultServerConnection.getMore(DefaultServerConnection.java:194)

at com.mongodb.operation.QueryBatchCursor.getMore(QueryBatchCursor.java:197)

at com.mongodb.operation.QueryBatchCursor.hasNext(QueryBatchCursor.java:93)

at com.mongodb.MongoBatchCursorAdapter.hasNext(MongoBatchCursorAdapter.java:46)

at com.mongodb.DBCursor.hasNext(DBCursor.java:152)

at locationExtraction.DistanceClassification.FeatureAnalyzer.main(FeatureAnalyzer.java:27)

FeatureAnalyzer.java:27是for循环行.

此问题出现在具有类似设置的其他项目中…

我究竟做错了什么?也许我选择’for’循环而不是这种迭代会导致这种奇怪的行为?

while(cursor.hasNext())

{

DBObject next = cursor.next();

}

谢谢

看起来您无法在时间限制内处理每个批次.尝试减少批量大小,以便在时间用完之前消耗每批次.这应该有所帮助.

cursor.addOption(com.mongodb.Bytes.QUERYOPTION_NOTIMEOUT).batchSize(100)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值