Использование условного выражения «attribute_not_exists (PK)» всегда разрешается в true

Я создаю приложение, используя API GraphQL в AWS AppSync, с DynamoDB для хранения. В моей таблице DynamoDB используется только первичный ключ (идентификатор) и не используется ключ сортировки. Я хочу убедиться, что новые объекты, добавляемые в таблицу (с тем же первичным ключом/идентификатором), не перезаписывают существующие объекты.

Мой обработчик лямбда-функции содержит следующий код:

const params = {
        TableName : "myTable",
        Item: {
            id: "4321",
            name: event.arguments.input.name,
            description: event.arguments.input.description
        },
        ConditionalExpression: 'attribute_not_exists(id)',
    };

await documentClient.put(params, function(err, data) {
        if (err) {
            console.log(err);
            callback(err);
        } else {
            callback(null, data)
        }
    }).promise();

Согласно нескольким источникам (1, 2, 3), условное выражение attribute_not_exists(id) должно препятствовать добавлению в таблицу записей с одинаковым идентификатором, поскольку это первичный ключ, а у меня нет ключа сортировки.

После добавления первого объекта в базу данных я ожидал, что последующие вызовы будут неудачными, поскольку я жестко запрограммировал поле id, чтобы проверять, что объекты не могут быть перезаписаны с тем же идентификатором. Однако я вижу, что объект обновляется в DynamoDB, так как меняются неключевые поля (имя и описание).

Для дополнительного контекста я выполнял эту мутацию, используя часть «Выполнить запрос» консоли AppSync в консоли управления AWS. Затем я проверяю успешность мутации, просматривая свои таблицы DynamoDB в консоли управления AWS.


person Holly Mayward    schedule 04.08.2021    source источник


Ответы (1)


Обнаружено, что это произошло из-за орфографической ошибки — «ConditionalExpression» должно быть «ConditionExpression».

person Holly Mayward    schedule 04.08.2021