Azure cosmosdb 具有延续令牌的文档数据库存储过程无法更新所有记录
我试图将特定用户的所有文档的属性设置为false。 我正在使用存储过程来做同样的事情。 下面的过程仅获取部分记录并更新它们Azure cosmosdb 具有延续令牌的文档数据库存储过程无法更新所有记录,azure-cosmosdb,document-database,Azure Cosmosdb,Document Database,我试图将特定用户的所有文档的属性设置为false。 我正在使用存储过程来做同样的事情。 下面的过程仅获取部分记录并更新它们 function spBulkUpdateTrackInventory(tenantId) { var queryDocument = " select * from c where c.tenantId = '" + tenantId + "'"; var collection = getContext().getCollection(); var
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);
}
}
我总共有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);
}
}
函数spBulkUpdateTrackInventory(tenantId){
var queryDocument=“从c中选择*,其中c.tenantId=”+tenantId+”;
var collection=getContext().getCollection();
var collectionLink=collection.getSelfLink();
var response=getContext().getResponse();
var responseBody={
updatedCount:0,
续:对
};
获取产品();
函数产品(续){
var requestOptions={continuation:continuation,pageSize:-1};
var isAccepted=collection.queryDocuments(collection.getSelfLink()、queryDocument、requestOptions、,
函数(err、retrievedDocs、responseOptions){
如果(错误)抛出新错误(“错误”+错误消息);
如果(retrievedDocs.length>0)
{
updateTrackInventory(retrievedDocs、responseOptions.continuation);
}
});
如果(!isAccepted)getContext().getResponse().setBody(responseBody);
}
函数updateTrackInventory(文档,续){
对于(var cnt=0;cnt
我缺少什么?我创建了
3000
文档,这些文档通过name
分区键进行了半分区,以测试代码。它工作正常
我建议您检查存储过程和查询shell中运行的SQL结果是否一致。此外,您可以遵循以下情况:使用console.log
调试存储过程
希望它能帮助您。您能检查一下sp执行过程中是否有429个错误吗?response.StatusCode的值是多少?@sham Hi,现在有什么进展吗?@JayGong,在Prod环境中,没有一个用户有这么多记录。没有机会调查it@sham正在等待您的测试结果…@sham现在有更新吗?我的回答对你有帮助吗?