我想使用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再次调用脚本或修改脚本 . 堆栈跟踪:错误:由于“正文”,导致的消息太大 . 使用当前消息从脚本返回并使用continuation token再次调用脚本或修改脚本 .
2 回答
文档DB对响应页面大小施加限制 . 此链接总结了其中一些限制: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/
您使用.NET sdk来检索存储过程返回的数据吗?如果是这样,请利用.HasMoreResults . 它会自动获取允许的大小数据结果,从而不会显示您发布的错误 . 循环通过它,直到没有更多的结果 .
http://www.kevinkuszyk.com/2016/08/19/paging-through-query-results-in-azure-documentdb/