我有一个使用SQL / DocumentDB接口的CosmosDB实例。我正在通过.NET SDK访问它。
我有用ExecuteStoredProcedureAsync调用的存储过程。但是我最多只能退回100个文档。我知道这是默认选项。我可以改变吗?
ExecuteStoredProcedureAsync的可选参数是RequestOptions对象。 RequestOptions没有MaxItemCount或延续标记的属性。
最佳答案
您需要更改SP本身,以调整您要返回的记录数量。这是一个完整示例,其中包含SP-中已实现的跳过/获取逻辑
function storedProcedure(continuationToken, take){
var filterQuery = "SELECT * FROM ...";
var accept = __.queryDocuments(__.getSelfLink(), filterQuery, {pageSize: take, continuation: continuationToken},
function (err, documents, responseOptions) {
if (err) throw new Error("Error" + err.message);
__.response.setBody({
result: documents,
continuation: responseOptions.continuation
});
});
}
这是相应的C#代码:
string continuationToken = null;
int pageSize = 500;
do
{
var r = await client.ExecuteStoredProcedureAsync<dynamic>(
UriFactory.CreateStoredProcedureUri(DatabaseId, CollectionId, "SP_NAME"),
new RequestOptions { PartitionKey = new PartitionKey("...") },
continuationToken, pageSize);
var documents = r.Response.result;
// processing documents ...
// 'dynamic' could be easily substituted with a class that will cater your needs
continuationToken = r.Response.continuation;
}
while (!string.IsNullOrEmpty(continuationToken));
如您所见,有一个参数控制发送回的记录数-pageSize。您已经注意到,默认情况下pageSize是100。如果需要一次全部返回,请指定-1。
关于c# - 从ExecuteStoredProcedureAsync取回100多个文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47914932/