为什么dbcursor.count()不符合hasNext-then-next迭代的次数?

时间:2013-04-03 03:01:34

标签: java mongodb

一个奇怪的问题: 我打印dbcursor.count(),它使用db.collectionName.count()生成与我从mongo shell获得的数字相同的数字。

然而, 我喜欢的时候,

DBCursor cursor = myCollection.find(someQuery);
int count = cursor.count();
int cnt = 0;
while (cursor.hasNext()) {
    cnt++;               
    DBObject dbObject = (DBObject) cursor.next();
} 

之后,count和cnt会产生冲突结果: 前者是我所期望的, 而后者远远少于前者。

然后我检查了mongodb DBCursor API文档。 http://api.mongodb.org/java/2.0/com/mongodb/DBCursor.html

来自count()和hasNext()的措辞

public int count()
    throws MongoException

Counts the number of elements in this cursor.  

Returns:
       the number of elements

public boolean hasNext()

Checks if there is another element.

Returns:
    if there is another element

这意味着count和cnt应该相同。 只是为了记录,在这个过程中mongodb 没有插入或删除操作。(我测试过 用于测试的镜像数据库)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

正如@assylias的评论,可能是由于索引损坏。