2015-05-11 32 views
2

出於某種原因,我不能讓分頁正常工作爲天青DocumentDB無法獲得尋呼Azure的工作DocumentDB

下面的代碼片段

var finalResults = new List<MyResult>(); 
// Here I am setting max page size to be 10 
var options = new FeedOptions { MaxItemCount = 10 }; 
var query = client.CreateDocumentQuery<MyResultItem>(collection.SelfLink, options) 
        .SelectMany(r => r.Results) 
        .Where(r => r.Result > 75) 
        .Select(r => r) 
        .AsDocumentQuery(); 
// it only works 1 iteration and next iteration I always get HasMoreResults = false 
// if I set MaxItemCount = 20, then I get 20 only 
while (query.HasMoreResults) 
{ 
    var pagedResults = query.ExecuteNextAsync<MyResult>().Result; 
    foreach (var pagedResult in pagedResults) 
    { 
     finalResults.Add(pagedResult); 
    } 
} 

無論什麼價值我的MaxItemCount設置,它不僅會得到這麼多的項目,並不會得到下一批,所以我得到query.HasMoreResults總是返回false在第二次迭代。我無法找到問題的所在

更新:

JSON結構如下:

.NET對象名稱MyResultItem

{ 
    Id: "xxxxxxxxxxxxxxxxxxxxx", 
    Name: "xxxxxxxxxxxxxxx", 
    Results: [ 
     { Id: 1, Result: 123 }, 
     { Id: 2, Result: 40 }, 
     { Id: 3, Result: 75 } 
    ] 
} 

我試圖得到一個平坦的列表「結果」其中結果> 75

+0

澄清 - 您期望得到多少結果?從這個問題我假設你期望超過20個文件?介紹一些示例數據? –

+0

@aliuy嗨,我期待約975結果。我認爲SelectMany有一個限制。看起來像只能「翻頁」頂層文檔,而不是對象的子項(即r.Results是MyResults中的子數組)。雖然,我可能是錯的 – fenix2222

回答

1

這似乎是一個bug/DocumentDB;當子數組中元素的數量小於請求的頁面大小時,繼續令牌對selectmany(和連接)的行爲不當。

我發現MSDN forums上的這個主題類似的線程。

修正目前正在進行中。

與此同時,您可以嘗試通過增加頁面大小來解決此問題(例如將其設置爲最大值1000)。

+0

很高興知道。將它設置爲1,000會首先破壞尋呼的目的。如果我有5000個項目,我可以將它設置爲1000,仍然可以獲得5個頁面? – fenix2222

+0

此外,我沒有得到這個限制「每個IN表達式的最大數量* 100」,如果我設置MaxItemCount = 1000,我得到1000,而不是100. – fenix2222

+0

對,您可以將頁面大小設置爲最大(1000 )作爲臨時解決方法;這個錯誤修復後,這是沒有意義的。對於5000個項目 - 查詢將根據文檔的形狀工作。例如,查詢應始終適用於發送5000個文檔的數據,但對於每個數組爲2500個數組元素的數據集(數組大小>頁面大小),您可能會得到不正確的結果。 Selectmany使數組中的元素變平。如果在父文檔上使用IN運算符,則可以預期展開結果。 –