由DBCursor的“can't switch cursor access methods”异常引发的思考

Posted herman很慢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由DBCursor的“can't switch cursor access methods”异常引发的思考相关的知识,希望对你有一定的参考价值。

先谈谈我是怎么用的:

 DBCollection dbcollection =  XXXXXXXXXX();  //连接mongo
        DBCursor dbCursor = mergeVideoDB.find(XXXX);  //根据name查出若干个 
        if (dbCursor.length() == 1) {
            return videoinfos;
        }
        while(dbcursor。hasNext()){    // 这一步产生错误,报出DBCursor的“can‘t switch cursor access methods”
           XXXXXX;
     }
以上!

首先在使用hasNext方法后需要先通过 _checkType() 检查 cursor 类型。 

 1 void _checkType( CursorType type ){
 2         if ( _cursorType == null ){
 3             _cursorType = type;
 4             return;
 5         }
 6 
 7         if ( type == _cursorType )
 8             return;
 9 
10         throw new IllegalArgumentException( "can‘t switch cursor access methods" );
11     }

回过头来看,  DBCursor dbCursor = mergeVideoDB.find(XXXX); //根据name查出若干个  

此时,DBCursor的type为 null

 if (dbCursor.length() == 1) {
            return videoinfos;
        }

在执行完上述步骤后,DBCursor的type变为了array

所以在使用hasNext方法时会报出

"can‘t switch cursor access methods"
解决思路:
1.不要在之前使用会更改其type的方法进行操作;
2.使用除hasNext之外的其他遍历方法进行遍历
直接使用foreach方法进行遍历即可:
for (DBObject dbObject:dbCursor){}。
 











以上是关于由DBCursor的“can't switch cursor access methods”异常引发的思考的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB的java操作

mongodb 笔记

java操作mongodb

缩小所有开发数据库

MongoDB--Java 操作 MongoDB 的 API

mongodb去除重复的数据