Cosmos DB — это мощная, полностью управляемая, глобально распределенная и мультимодельная служба базы данных, предоставляемая Microsoft Azure. Одной из его ключевых функций является возможность создавать и выполнять хранимые процедуры, представляющие собой функции JavaScript, которые можно использовать для выполнения операций с данными в вашем контейнере. В этом посте мы рассмотрим, как создать и выполнить хранимую процедуру в Cosmos DB, которая обновляет документ в контейнере.

Создание хранимой процедуры

Чтобы создать хранимую процедуру, нам нужно предоставить функцию JavaScript, которая выполняет желаемую операцию. В этом случае мы хотим обновить документ в контейнере, поэтому мы создадим функцию, которая принимает в качестве параметров идентификатор документа, который нужно обновить, и сам обновленный документ. Затем функция извлечет документ из контейнера, используя предоставленный идентификатор, и заменит старый документ обновленным.

Вот пример функции JavaScript, которую мы можем использовать для обновления документа в контейнере:

function updateDocument(id, updatedDoc) {
    var container = getContext().getCollection();
    var query = "SELECT * FROM c WHERE c.id = '" + id + "'";
    var accept = container.queryDocuments(container.getSelfLink(), query, function (err, documents, options) {
        if (err) throw new Error("Error: " + err.message);
        if (documents.length != 1) throw new Error("Document not found");
        var doc = documents[0];
        doc = updatedDoc;
        container.replaceDocument(doc._self, doc, function (err, updatedDoc) {
            if (err) throw new Error("Error: " + err.message);
            getContext().getResponse().setBody(updatedDoc);
        });
    });
    if (!accept) throw new Error("Unable to read document");
}

Важно отметить, что вы должны заменить ссылку на контейнер ссылкой на ваш контейнер в приведенном выше коде.

Выполнение хранимой процедуры

После создания хранимой процедуры ее можно выполнить на портале Azure, используя:

  1. Перейдите в свою учетную запись Cosmos DB на портале Azure.
  2. Выберите базу данных, содержащую контейнер, в котором находится ваш документ.
  3. Выберите вкладку «Хранимые процедуры».
  4. Нажмите на кнопку «Выполнить».
  5. В колонке «Выполнение хранимой процедуры» введите идентификатор документа, который вы хотите обновить, и обновленный документ в предоставленных полях ввода.
  6. Нажмите кнопку «Выполнить», чтобы запустить хранимую процедуру.

Кроме того, вы можете вызвать хранимую процедуру через SDK, создав клиент, передав идентификатор и параметры хранимой процедуры.

var client = new CosmosClient(connectionString);
var storedProcedure = client.getStoredProcedure("your container link", "updateDocument");
var response = await storedProcedure.execute({id: "your document id", updatedDoc: {your updated document}});

Подводя итог, можно сказать, что хранимые процедуры Cosmos DB предлагают надежный и адаптируемый подход к управлению данными с высокой доступностью и масштабируемостью. Следуя шагам, описанным в этом руководстве, вы теперь можете создать и выполнить хранимую процедуру, которая обновляет документ в контейнере, упрощая обновление и организацию ваших данных. С помощью инструментов, представленных в этом посте, вы можете начать использовать хранимые процедуры в своих проектах Cosmos DB. Не забывайте тестировать свой код и отслеживать производительность и масштабируемость решения по мере разработки и развертывания приложения.