0

奇妙な問題: dbcursor.count() を出力します。これは、db.collectionName.count() を使用して、mongo シェルから取得したものと同じ数を生成します。

しかし、私がこのようにすると、

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 doc を確認しました。 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には挿入も削除操作もありません(テストのためにミラーdbでテストしました)

何か案が?

4

1 に答える 1

0

@assylias がコメントしているように、インデックスの破損が原因である可能性があります。

于 2013-05-01T02:57:42.483 に答える