2017-04-19 84 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

    再次感謝您的回覆。我已經找到了我的問題。我沒有提供分區密鑰。這是主要問題。提供分區鍵後,它正常工作。 :) –