2017-04-19 78 views
0

我试图从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"而不是一个随机的字符串。因此,虽然它被排序,但它每次都返回相同的结果。

回答

1

的问题是与分区键。没有提供分区键,这就是为什么它一遍又一遍地返回相同的结果。提供正确的分区密钥后,它正在工作。

1

排序,如果我们创建一个“全范围”索引集的顺序按反对任何在Azure中documendb支持/出现在它的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); 

我不能重现你在我身边提到的问题。

enter image description here

我以为这是你的oderby sortingPredicate引起的,我们可以用以下方式troubleshot:

  1. 尝试在Azure门户执行SQL查询,如果失败,我们可以得到更详细的信息。

enter image description here

enter image description here

  • document我们也知道,我们不能执行以下操作目前
  • 以便能够通过与内部字符串属性,如id,_rid和_self(即将推出)。

    排序依据来自文档内部连接(即将推出)的结果的属性。

    排序通过多个属性(即将推出)。

    通过查询数据库,集合,用户,权限或附件(即将推出)排序。

    排序依据计算出的属性例如表达式或UDF /内置函数的结果。

    注意:如果没有解决,请分享您的OrderBy(sortingPredicate)

    编辑:

    我不能瑞普你就在我身边提到的问题,我也可以用GROUPBY和responseContinuation时获得下一个页面。

    enter image description here

    +0

    感谢您的回复。根据您的查询,我编辑了我的问题。请看看 –

    +0

    我不能在我身边重现这个问题。当使用groupby和responseContinuation时,我也可以得到下一页。更多详细信息请参阅最新的答案。 –

    +0

    再次感谢您的回复。我已经找到了我的问题。我没有提供分区密钥。这是主要问题。提供分区键后,它正常工作。 :) –