How do I set continuation tokens for Cosmos DB queries sent by document_client objects in Python?

后端 未结 3 1150
一个人的身影
一个人的身影 2021-01-26 23:03

I have an API that retrieves documents based on keywords that appear in document fields. I would like to paginate results so that I can return documents to a client sending a re

相关标签:
3条回答
  • 2021-01-26 23:25

    You can also get the results in pages using fetch_next_block(). Note that: the user's code should not expose the continuation token

    q = db_source._client.QueryDocuments(collection_link, query,  {'maxItemCount': 10, 'continuation': True})
    results = q.fetch_next_block()
    

    ref: https://github.com/Azure/azure-documentdb-python/issues/98

    0 讨论(0)
  • 2021-01-26 23:26

    It turns out that the query results needed to be handled from the results object itself, and the method _fetch_function(options) should be called:

    q = client.QueryDocuments(collection_link, query, {'maxItemCount':10})
    results_1 = q._fetch_function({'maxItemCount':10})
    #this is a string representing a JSON object
    token = results_1[1]['x-ms-continuation']
    results_2 = q._fetch_function({'maxItemCount':10,'continuation':token})
    

    The data is contained in results_[n][0] and header information returned from the call is returned in results_[n][1].

    0 讨论(0)
  • 2021-01-26 23:47

    The way continuation token works is that when you query documents and there are more documents available matching that query, service returns you a marker (or a token) that you need to include in your next query. That will tell the service to fetch the documents from that marker and not the beginning.

    So in your code, the very 1st query will have no continuation parameter (or null). When you get the result, you should find if or not a token is returned from the service. If no token is returned that means there's no more data available. However if a token is returned, you should include that in your query options in the 2nd query.

    0 讨论(0)
提交回复
热议问题