簡體   English   中英

MongoDB C# 驅動程序 - CountDocuments 錯誤地返回錯誤值

[英]MongoDB C# Driver - CountDocuments erronously returns wrong value

好的,所以這有點棘手。

我有這個塊

        var collResult = _coll.Find(cnFilter & statusFilter & startFilter & endFilter & textFilter);
        var findTask = Task.Factory.StartNew(() => {
            return collResult.SortByDescending(i => i.dim_InvoiceDate_key).Skip(skip).Limit(take);
        });
        var countTask = Task.Factory.StartNew(() => {
            return collResult.CountDocuments();
        });
        await Task.WhenAll(findTask, countTask);

CountDocuments 大多數時候返回一個准確的數字,表示沒有跳過和限制的過濾查詢。 但偶爾,當它的計數超過 25k 左右時,它會返回與 findTask 結果包含的相同計數。 (大多數情況下為 50 個)

嘗試使用舊的 _coll.Count() 並且我收到過時的錯誤,我能為此做些什么嗎?

似乎如果 findTask 在 Count 甚至有時間開始之前完成(由於並發或其他原因),findTask 中設置的 Limit 正在通過共享的 Find() 泄漏,而 CountDocuments() 則認為它應該計算它。 將任務放在 findTask 之前甚至還不夠,這樣它應該有機會在之前完成,我必須創建它自己的 Find-pipeline 以便它不會泄漏。

            var findResult = _coll.Find(cnFilter & orderDateFilter & deliveryDateFilter & statusFilter & keywordFilter);
            var countResult = _coll.Find(cnFilter & orderDateFilter & deliveryDateFilter & statusFilter & keywordFilter).CountDocumentsAsync();

然后我分別使用 countResult 任務

暫無
暫無

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

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