次のSPがコレクション全体を実行する場合、各ドキュメントでいくつかの処理を行いますが、ここでは破棄してから処理したドキュメントに置き換えます。DocumentDBのreplaceDocument要求が拒否された理由
返されたcontinuationTokenでSPが何度も何度も呼び出していることがわかります。
SPをコピーし、結果の数字を参照してください。 最後のクエリのドキュメントが置き換えられていないため、キューイングから拒否されました。
なぜですか?
SP:DocumentDB内の任意の要求等
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);
}}
お知らせは2つの部分があり、1は、いくつかの書類を要求している、第二には、それらを交換することです。 1000の文書が要求されていて、現在は置換に失敗した場合continuationToken(どのように要求の一部であり、置換ではありません)は、私が次の文書を要求し続け、どのように置き換えられなかったのかをスキップします。 @ShireeshThota –