下一個SP運行在整個集合上,對每個文檔執行一些處理,我放棄這裏,然後用處理後的文檔替換文檔。DocumentDB,爲什麼replaceDocument請求被拒絕
您會看到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);
}}
注意有兩個部分,一個是要求一些文件,二是替換它們。如果已請求1000個文檔,現在無法替換。 continuationToken(如何是請求的一部分,而不是替換)使我繼續請求下一個文檔並跳過那些未被替換的文檔。 @ShireeshThota –