下一个SP运行整个集合,对每个文档执行一些处理,我在这里放弃,然后用处理过的文档替换文档。
您将看到SP一次又一次地使用返回的continuationToken进行调用,查询更多文档。
通过SP复制并查看结果中的数字.. 上次查询的文件没有被替换,他们被排队等候拒绝了。
为什么?
SP:
function sample(continuationToken) {
var continuations = [];
var pSize = 100000;
var filterQuery = "select * from w";
var documentsProcessed = 0;
var querysCount = 0;
var documentsReplaced = 0;
var documentsRejectFromQueue = 0;
var context = getContext(),
collection = context.getCollection(),
response = context.getResponse();
tryQuery(continuationToken);
function tryQuery(nextContinuationToken) {
var options = { continuation: nextContinuationToken, pageSize: pSize };
if (!query(options)) {
setBody(nextContinuationToken);
}
}
function query(options) {
return (filterQuery && filterQuery.length) ?
collection.queryDocuments(collection.getSelfLink(), filterQuery, options, processMultiUsers) :
collection.readDocuments(collection.getSelfLink(), options, processMultiUsers);
}
function processMultiUsers(err, docs, options) {
for (j = 0; j < docs.length; j++) {
documentsProcessed++;
processUser(docs[j]);
}
querysCount++;
if (options.continuation) {
tryQuery(options.continuation);
} else {
setBody(null);
}
}
function processUser(doc, items) {
// do something with items...
doc.WishList = items;
var accept4 = collection.replaceDocument(doc._self, doc, { indexAction: "default" }, function (err, feed, options) {
if (err) throw err;
});
if (!accept4) documentsRejectFromQueue++;
}
function setBody(continuationToken) {
var body = { continuationToken: continuationToken, documentsProcessed: documentsProcessed, QuerysCount: querysCount, DocumentsReplaced: documentsReplaced, DocumentsRejectFromQueue: documentsRejectFromQueue};
getContext().getResponse().setBody(body);
}}
答案 0 :(得分:1)
存储过程与DocumentDB中的任何请求一样,设置为在有限的时间间隔内执行。对于需要更多时间的请求,有一个延续机制。在存储过程中,每个集合操作都返回Boolean标志,以指示请求是否可以排队。如果它为false,则该函数应该包装当前请求并从客户端返回一个全新请求,其中包含到目前为止已保留的延续令牌。
在您的代码中,如果您注意到documentsRejectFromQueue为非零,则表示请求已超出单个往返执行时间。但是,您可以使用从响应中返回的延续令牌从客户端发送新请求,并循环直到您从响应中找不到延续令牌。
更多细节可以在这里找到 - https://azure.microsoft.com/en-us/documentation/articles/documentdb-programming