С помощью следующего кода, я бы итерацию по коллекции MongoDB, чтобы вычислить его количество. (С петлевой, ограничение и сортировать по _id по возрастанию)Подсчитайте коллекцию MongoDB итерируя над ним не дает правильное количество
Игнорируйте тот факт, что существуют другие способы вычисления счета, поскольку я использую этот способ для выполнения других действий (этот код просто иллюстрирует тот факт, что я не могу извлечь все документы).
Но это не дает правильного счета. Итоговые документы моей коллекции должны быть 12637833, , но со следующим кодом, число напечатано 12602135.
То есть между ними существует около 30 тысяч разрывов.
Может ли кто-нибудь помочь, что может привести к этой проблеме? Благодаря!
DBObject query = new BasicDBObject();
DBObject sorter = new BasicDBObject("_id", 1);
ObjectId largestObjectId = null;
int count = 0;
while (true) {
DBCursor cursor = c.find(query).sort(sorter).limit(200000);
if (!cursor.hasNext()) {
break;
}
while (cursor.hasNext()) {
count++;
BasicDBObject document = (BasicDBObject) cursor.next();
if (document == null) {
continue;
}
largestObjectId = (ObjectId) document.get("_id");
}
query = new BasicDBObject("_id", new BasicDBObject("$gt", largestObjectId));
cursor.close();
}
System.out.println("Total Count is: " + count)
Это оштукатуренная коллекция? – hyades
Спасибо @hyades за ответ. Да. – Tom
Возможно, это связано с https://jira.mongodb.org/browse/SERVER-5931. Вместо запроса 'find' вы можете попробовать запрос агрегации' [{$ match: query}, {$ sort: {sorter}}, {$ limit: 200000}] ' – hyades