我试图从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时,我也可以得到下一页。更多详细信息请参阅最新的答案。 –
再次感谢您的回复。我已经找到了我的问题。我没有提供分区密钥。这是主要问题。提供分区键后,它正常工作。 :) –