我有一个使用SQL / DocumentDB接口的CosmosDB实例。我通过.NET SDK访问它。
我有使用ExecuteStoredProcedureAsync调用的存储过程。但我最多只能获得100份文件。我知道这是默认选项。我可以改变吗?
ExecuteStoredProcedureAsync的可选参数是RequestOptions对象。 RequestOptions没有MaxItemCount或continuation令牌的属性。
答案 0 :(得分:1)
您需要更改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。
答案 1 :(得分:0)
RequestOptions没有MaxItemCount或者属性 继续令牌。
MaxItemCount是Feedoptions中的参数。
ExecuteStoredProcedureAsync
方法不限制返回的数据条目,关键是您在存储过程中的查询操作设置了要返回的最大条目数。
请参阅以下示例存储过程代码:
function sample(prefix) {
var collection = getContext().getCollection();
var isAccepted = collection.queryDocuments(
collection.getSelfLink(),
'SELECT * FROM root r',
{ pageSize: 1000 },
function (err, feed, options) {
if (err) throw err;
if (!feed || !feed.length) {
var response = getContext().getResponse();
response.setBody('no docs found');
}
else {
var response = getContext().getResponse();
var body = "";
for(var i=0 ; i<feed.length;i++){
body +="{"+feed[i].id+"}";
}
response.setBody(JSON.stringify(body));
}
});
if (!isAccepted) throw new Error('The query was not accepted by the server.');
}
结果: