Der nächste SP über die gesamte Sammlung laufen, einige Prozesse auf jedem Dokument, die ich hier verwerfen, dann ersetzen Sie das Dokument mit dem verarbeiteten Dokument.DocumentDB, warum replaceDocument-Anfragen abgelehnt wurden
Sie werden sehen, die SP immer wieder mit der zurückgegebenen continuationToken aufrufen, Abfrage für weitere Dokumente.
kopieren Sie nach dem SP und sehen Sie die Zahlen in den Ergebnissen .. die Dokumente aus der letzten Abfrage wurde nicht ersetzt, sie wurden von der Warteschlange zurückgewiesen.
Warum?
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);
}}
Hinweis gibt zwei Teile, so wird man einige Dokumente anfordert, ist die zweite, sie zu ersetzen. wenn 1000 Dokumente angefordert wurden und jetzt nicht ersetzt werden können. Der continuationToken (wie ist der Teil der Anfrage, nicht der Ersatz) lässt mich weiter die nächsten Dokumente anfordern und diejenigen überspringen, die nicht ersetzt wurden. @ShireeshThota –