Я пытаюсь запустить агрегацию в большой коллекции, используя Mongo Java Driver 3.0.4. На маленьких образцах моей коллекции все отлично работает, но когда я попытался выполнить ее во всей коллекции, я закончил с MongoCursorNotFoundException
. Я обнаружил, что проблема Cursor в том, что время ожидания и закрытие сервера.MongoDB Java Driver - Как отключить Cursor Timeout в запросе агрегирования?
Однако я не могу понять, как установить этот параметр. Функция aggregate() возвращает AggregateIterable, который имеет только useCursor
метод, который кажется каким-то релевантным. С другой стороны, функция find() возвращает FindIterable, которая имеет удобный метод noCursorTimeout(Boolean)
. Я не понимаю, почему это так просто найти, но нет очевидного способа для этого варианта для агрегата. Как я должен убедиться, что курсор не сработает через некоторое время?
Мой код до сих пор это.
AggregateIterable<Document> iterable = db.getCollection("tweets").aggregate(asList(new Document("$sort", new Document("timestamp_ms", 1)),
new Document("$group", new Document("_id", "$relatedTrend")
.append("count", new Document("$sum", 1))
.append("tweets", new Document("$push", new Document("timestamp_millis", "$timestamp_ms")))))).allowDiskUse(true);
iterable.forEach(new Block<Document>() {
@Override
public void apply(final Document document) {
//parse field "tweets" of document and do a lot of calculations.
}
});