Как проверить, устарел ли элемент в cosmosDB, используя функции azure и sdk узла космоса? - PullRequest
0 голосов
/ 14 июля 2020

В настоящее время у меня есть элемент в базе данных, который два пользователя пытаются обновить. Если один обновляет элемент, я хочу, чтобы обновление другого пользователя не удалось, а затем повторите попытку. Я нашел образец кода для C# с использованием внутреннего eTag, но не могу найти эквивалент javascript.

https://github.com/Azure/azure-cosmos-dotnet-v3/blob/e22f9593a1245d3b1c98db78bacc89e4786d96e7/Microsoft.Azure.Cosmos.Samples/Usage/ItemManagement/Program.cs#L683 -L734

Здесь это какой-то псевдокод для того, что я хочу сделать с помощью etag:

const patchItem = async function(container: Container, incomingItem: ItemData, currentItem: ItemData)
{
    // state is an array of objects and this just adds to it
    incomingItem.state.forEach(c => currentItem.state.push(c));
    const appendedItem = 
    {
        id: currentItem.id,
        state: currentItem.state
        _etag: currentItem._eTag
    };
    const { resource: updatedItem } = await container.item(incomingItem.id).replace(appendedItem, {IfMatchETag = appendedItem._eTag});
    return updatedItem;
};

Я также читаю документацию по процессору подачи изменений и задаюсь вопросом, есть ли способ прочитать, что элемент был изменен, а затем сбой обновление. Я не уверен, как реализовать проверку изменений в процессоре подачи изменений, поэтому любая помощь с этим также будет оценена. Спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

Я нашел эквивалент javascript для etag и сделал следующее исправление:

const { resource: updatedItem } = await container.item(incomingItem.id).replace(appendedItem,  { accessCondition: { type: "IfMatch", condition: currentItem._etag } });

Здесь найдена документация: https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-nodejs-samples

Пример кода: https://github.com/Azure/azure-cosmos-js/blob/master/samples/ItemManagement.ts#L98 -L135

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...