如何使用查询从azure cosmos db获取所有记录

时间:2017-08-21 12:28:53

标签: azure-cosmosdb

我想使用select query从azure-cosmos DB中获取100条以上的记录。

我正在编写存储过程并使用select查询来获取记录。

这是我的存储过程 -

function getall(){
 var context = getContext();
  var response = context.getResponse();
  var collection = context.getCollection();
  var collectionLink = collection.getSelfLink();

  var filterQuery = 'SELECT * FROM c';

  collection.queryDocuments(collectionLink, filterQuery, {pageSize:-1 },
    function(err, documents) {
      response.setBody(response.getBody() + JSON.stringify(documents));
    }
  );
}

最初,它在数据库中处理的数据量较少。

但是,有大量数据,    存储过程抛出此异常 -

  

执行功能时遇到异常。例外=错误:   由于“正文”,导致的消息太大。从...返回   脚本与当前消息并使用延续令牌来调用   再次编写脚本或修改脚本。堆栈跟踪:错误:结果   消息因“身体”而过大。从脚本返回   当前消息并使用continuation token再次调用脚本或   修改你的脚本。

2 个答案:

答案 0 :(得分:0)

文档数据库对响应页面大小施加限制。 此链接总结了其中一些限制: Azure DocumentDb Storage Limits - what exactly do they mean?

您可以使用延续令牌对数据进行分页。 Document Db sdk支持无缝读取分页数据。 https://azure.microsoft.com/en-us/blog/documentdb-paging-support-with-top-and-more-query-improvements/

答案 1 :(得分:0)

您是否使用.NET sdk来检索存储过程返回的数据?如果是这样,请利用.HasMoreResults。它会自动获取允许的大小数据结果,从而不会显示您发布的错误。循环通过它,直到没有更多的结果。

http://www.kevinkuszyk.com/2016/08/19/paging-through-query-results-in-azure-documentdb/