Хранимая процедура Document Db с маркером продолжения не может обновить все записи - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь установить для свойства всех документов конкретного пользователя значение 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 голосов
/ 05 июля 2018

Я создал 3000 документы, которые наполовину разделены name ключом раздела для проверки вашего кода. Работает нормально.

enter image description here

Я предлагаю вам проверить, согласован ли результат SQL в хранимой процедуре и в оболочке запроса. Кроме того, вы можете выполнить этот случай Как отладить хранимые процедуры Azure Cosmos DB? : использовать console.log для отладки вашей хранимой процедуры.

Надеюсь, это поможет вам.

...