[英]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.