簡體   English   中英

MongoDB Java驅動程序-如何在聚合查詢中禁用游標超時?

[英]MongoDB Java Driver - How to disable Cursor Timeout in aggregation query?

我正在嘗試使用Mongo Java Driver 3.0.4在一個大集合上運行聚合。 在我的集合的小樣本上,一切都很好,但是當我嘗試在整個集合上執行它時,我最終遇到了MongoCursorNotFoundException 我發現這是游標超時並被服務器關閉的問題。

但是,我不明白如何設置此選項。 Aggregate()函數返回一個AggregateIterableuseCursor僅具有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.
    }
});

查看此MongoDB JIRA 票證 您可以在啟動mongodmongos實例時增加空閑光標超時:

mongod --setParameter cursorTimeoutMillis=<num>

要么

mongos --setParameter cursorTimeoutMillis=<num>

如果這不是一個選項,則還可以運行以下shell命令:

use admin
db.runCommand({setParameter:1, cursorTimeoutMillis: <num>})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM