具有延续令牌的文档Db存储过程无法更新所有记录

时间:2018-07-04 06:03:29

标签: azure-cosmosdb document-database

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

我想念什么?

1 个答案:

答案 0 :(得分:1)

我创建了3000个文档,它们用name分区键进行了一半分区,以测试您的代码。

enter image description here

我建议您检查SQL结果在存储过程和查询Shell中是否一致。此外,您可以遵循How to debug Azure Cosmos DB Stored Procedures?的情况:使用console.log来调试存储过程。 / p>

希望它对您有帮助。