for 循环而不是 while 循环中的游标功能?

Cursor functionality in a for loop as opposed to a while loop?

我正在使用 DBCursor 打印 MongoDB 数据库中的文档。当我使用 while 循环时,它工作正常。

        DBCursor cursor = people.find(new BasicDBObject("isPerson",true));
        while(cursor.hasNext()){
            System.out.println(cursor.next());
        }
        cursor.close();

使用 while 循环,打印文档。当我使用 for 循环时,出现错误。

        cursor = people.find(new BasicDBObject("isPerson",true));
        for(int a=0;a<cursor.length()-1;a++){                       
            System.out.println(cursor.next());                
        }
        cursor.close();

这是错误:

java.lang.IllegalArgumentException: Can't switch cursor access methods
at com.mongodb.DBCursor.checkIteratorOrArray(DBCursor.java:841)
at com.mongodb.DBCursor.next(DBCursor.java:168)
at mongotest.MongoTest.main(MongoTest.java:39)

但即使我使用以下代码绕过错误,也不会打印任何内容。

        cursor = people.find(new BasicDBObject("isPerson",true));
        int b = cursor.length()-1;
        cursor = people.find(new BasicDBObject("isPerson",true));
        for(int a=0;a<b;a++){                       
            System.out.println(cursor.next());                
        }
        cursor.close();

看看里面的 next() 方法 DBCursor class

@Override

public DBObject next() {
    checkIteratorOrArray(IteratorOrArray.ITERATOR);
    if (!hasNext()) {
        throw new NoSuchElementException();
    }

    return nextInternal();
}

它清楚地提到了 if !hasNext() 抛出异常

另外

如果您将 cursor.length() 保持在 for 循环中并通过调用 cursor.next() 继续迭代,游标长度会不断变化并引发异常。

看看你的替代方法,你已经用游标长度初始化变量 i 并且 i 的值在执行 FOR 循环期间不会改变。