带有连续令牌的文档数据库存储过程无法更新所有记录

问题描述 投票:0回答:2

我试图将特定用户的所有文档的属性设置为 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);
    }
}

我错过了什么?

azure-cosmosdb document-database
2个回答
1
投票

我创建了

3000
文档,这些文档由
name
分区键半分区来测试您的代码。它工作正常。

建议您检查存储过程和查询shell中运行的SQL结果是否一致。另外,您可以按照此案例如何调试Azure Cosmos DB存储过程?:使用

console.log
来调试您的存储过程.

希望对您有帮助。


0
投票

Cosmos DB 资源级别和/或容器级别的资源单元 (RU) 限制可能会限制存储过程可以查询和更新单次执行的文档数量。尝试增加这两个级别的数量(需额外付费)并重新测试存储的过程。

© www.soinside.com 2019 - 2024. All rights reserved.