Я создаю приложение, используя 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.