我试图从DATE
中检索一些文档,并启用了排序和分页。
azure 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)
中返回文字"ParallelDocumentQueryExecutionContext"
。
我想知道它为什么会这样?
修改
我已经添加了
范围类型索引
对于所有属性,因此这不是问题,它也按预期排序项目。但我遇到的问题是分页问题。我在集合中有数千个文档,我只想在每个集合中有20个条目。因此,当我删除orderBy谓词时,它无需排序即可工作,它在每个页面中为我提供了20个文档。我只是转发继续令牌。并且此延续令牌是随机字符串,每次都会更改。但是当我使用.Order时,responseContinuationToken
会返回result.ResponseContinuation
而不是随机字符串。结果虽然它被排序,但每次都会返回相同的结果。
答案 0 :(得分:1)
如果我们使用&#34; All Range&#34;创建一个集合,那么在Azure documendb中支持排序依据。 Order By针对其中JSON文档中出现的任何/所有数字或字符串属性的索引。更多详情请参阅document。
DocumentCollection books = new DocumentCollection();
books.Id = "books";
books.IndexingPolicy = new IndexingPolicy(new RangeIndex(DataType.String) { Precision = -1 });
await client.CreateDocumentCollectionAsync(UriFactory.CreateDatabaseUri("dbname"), books);
我不能重复你提到的那个问题。
我认为它是由你的oderby sortingPredicate引起的,我们可能会遇到以下问题:
使用内部字符串属性(如id,_rid和_self(即将推出))订购。
使用从文档内联接的结果派生的属性(即将推出)。
按多个属性排序(即将推出)。
对数据库,集合,用户,权限或附件进行查询(即将推出)。
按计算属性排序,例如表达式或UDF /内置函数的结果。
注意:如果问题仍未解决,请与您分享OrderBy(sortingPredicate)
。
修改强>
我无法重复您在我身边提到的问题,我也可以在使用groupby和responseContinuation时获得下一页。
答案 1 :(得分:1)
The problem was with the partition key. The partition key was not provided, that's why it was returning the same result over and over again. After providing the right partition key, it was working.