【问题标题】:Problem with continuation token when querying from Cosmos DB从 Cosmos DB 查询时延续令牌出现问题
【发布时间】:2019-09-17 18:40:46
【问题描述】:

我在从 CosmosDB 查询项目时遇到了延续问题。

我已经尝试过the following solution,但没有成功。即使我得到的令牌不是NULL,我也只能查询页面的前 10 个结果。

令牌的大小为10733 bytes,如下所示。

{"token":"+RID:gtQwAJ9KbavOAAAAAAAAAA==#RT:1#TRC:10#FPP:AggAAAAAAAAAAGoAAAAAKAAAAAAAAAAAAADCBc6AEoAGgAqADoASgAaACoAOgBKABoAKgA6AE4AHgAuAD4ASgAeACoAPgBOAB4ALgA+AE4AHgAqAD4ASgAeAC4APgBOAB4ALgA+AE4AIgA2AEYAFgAmADYARgAaACYAPgBKABYAKgA6AE4AHgAuAD4ATgAeAC4APgBOAB4ALgA+AE4AIgAuAD4ATgAeAC4APgBOACIAMgA+AFIAIgAyAD4AUgAmADIAQgAWACIALgBCABIAIgAyAEIAEgAiADIAQgAOACYANgBKAB4AJgA6AEYAGgAqADoATgAeAC4APgB....etc...etc","range":{"min":"","max":"05C1BF3FB3CFC0"}}

代码如下所示。功能QueryDocuments 不起作用。相反,我不得不使用QueryItems

options = {} 
options['enableCrossPartitionQuery'] = True
options['maxItemCount'] = 10

 q = client.QueryItems(collection_link, query, options)
    results_1 = q._fetch_function(options)
    #this is a string representing a JSON object
    token = results_1[1]['x-ms-continuation']

    data = list(q._fetch_function({'maxItemCount':10,'enableCrossPartitionQuery':True, 'continuation':token}))

有解决办法吗?感谢您的帮助。

【问题讨论】:

    标签: python azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    请使用pydocumentdb包并参考下面的示例代码。

    from pydocumentdb import document_client
    
    endpoint = "https://***.documents.azure.com:443/";
    primaryKey = "***";
    
    client = document_client.DocumentClient(endpoint, {'masterKey': primaryKey})
    
    collection_link = "dbs/db/colls/coll"
    
    query = "select c.id from c"
    
    query_with_optional_parameters = [];
    
    q = client.QueryDocuments(collection_link, query, {'maxItemCount': 2})
    results_1 = q._fetch_function({'maxItemCount': 2})
    
    print(results_1)
    token = results_1[1]['x-ms-continuation']
    results_2 = q._fetch_function({'maxItemCount': 2, 'continuation': token})
    
    print(results_2)
    

    输出:

    【讨论】:

    • 好的,谢谢。看来我误解了继续令牌的用法。这是否意味着 - 如果我想查询数据库中的所有文档 - 只要令牌不是 NULL,我就必须将 result_2 行放入循环中?
    • @Dan 如果我的回答对你有帮助,可以标记一下,非常感谢!
    • @Dan 当然!那么,请提供您的示例代码和示例文档?只需指定它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多