我試圖從azure DocumentDb
中檢索一些文檔,並啓用了排序和分頁功能。DocumentDB分頁與排序
var feedOptions = new FeedOptions
{
EnableCrossPartitionQuery = true,
MaxItemCount = size,
EnableScanInQuery = true
};
if (!string.IsNullOrEmpty(continuationToken))
{
feedOptions.RequestContinuation = continuationToken;
}
var query = Client.CreateDocumentQuery<T>(this.Collection.SelfLink, feedOptions)
.Where(filterPredicate)
//.OrderBy(sortingPredicate)
.AsDocumentQuery();
var result = await query.ExecuteNextAsync<T>();
var responseContinuationToken = result.ResponseContinuation;
var collection = result.AsEnumerable().ToList();
return new PageModel<T> { Collection = collection, ContinuationToken = responseContinuationToken };
這工作正常,沒有排序。但是,當我添加OrderBy(sortingPredicate)
時,它會在responseContinuationToken
中返回文本"ParallelDocumentQueryExecutionContext"
。
我想知道爲什麼它的行爲是這樣的?
編輯:
我已經添加了
範圍類型的索引
的所有屬性,所以在這裏不是一個問題,它也訂購的項目,如預期。但我面臨的問題是分頁。我在集合中有成千上萬的文檔,我只想在每組中有20個條目。所以,當我刪除orderBy謂詞時,它的工作原理沒有排序,它給了我每頁20個文檔。我只是轉發延續令牌。這個延續標記是一個隨機的字符串,每次都會改變。但是當我用戶.OrderBy result.ResponseContinuation
返回"ParallelDocumentQueryExecutionContext"
而不是一個隨機的字符串。因此,雖然它被排序,但它每次都返回相同的結果。
感謝您的回覆。根據您的查詢,我編輯了我的問題。請看看 –
我不能在我身邊重現這個問題。當使用groupby和responseContinuation時,我也可以得到下一頁。更多詳細信息請參閱最新的答案。 –
再次感謝您的回覆。我已經找到了我的問題。我沒有提供分區密鑰。這是主要問題。提供分區鍵後,它正常工作。 :) –