我试图将特定用户的所有文档的属性设置为 false。 我正在使用存储过程来执行相同的操作。 下面的过程仅获取部分记录并更新它们。
我总共有 2399 个文档。但过程只获取 1332 并更新它们。
function spBulkUpdateTrackInventory(tenantId) {
var queryDocument = " select * from c where c.tenantId = '" + tenantId + "'";
var collection = getContext().getCollection();
var collectionLink = collection.getSelfLink();
var response = getContext().getResponse();
var responseBody = {
updatedCount: 0,
continuation: true
};
fetchProducts();
function fetchProducts(continuation) {
var requestOptions = { continuation: continuation, pageSize:-1};
var isAccepted = collection.queryDocuments(collection.getSelfLink(), queryDocument, requestOptions,
function (err, retrievedDocs, responseOptions) {
if (err) throw new Error("Error" + err.message);
if (retrievedDocs.length > 0)
{
updateTrackInventory(retrievedDocs, responseOptions.continuation);
}
});
if (!isAccepted) getContext().getResponse().setBody(responseBody);
}
function updateTrackInventory(documents, continuation) {
for (var cnt = 0; cnt < documents.length; cnt++)
{
newdocument = documents[cnt];
newdocument.trackInventory = true;
responseBody.updatedCount++;
var isAccepted = collection.replaceDocument(documents[cnt]._self, newdocument);
if (!isAccepted) {
response.setBody(responseBody);
}
}
if (continuation) {
fetchProducts(continuation);
}
responseBody.continuation = false;
response.setBody(responseBody);
}
}
我错过了什么?
我创建了
3000
文档,这些文档由 name
分区键半分区来测试您的代码。它工作正常。
建议您检查存储过程和查询shell中运行的SQL结果是否一致。另外,您可以按照此案例如何调试Azure Cosmos DB存储过程?:使用
console.log
来调试您的存储过程.
希望对您有帮助。
Cosmos DB 资源级别和/或容器级别的资源单元 (RU) 限制可能会限制存储过程可以查询和更新单次执行的文档数量。尝试增加这两个级别的数量(需额外付费)并重新测试存储的过程。