Używam usługi AWS Lambda napisanej w Node.js, która współdziała z bazą danych DynamoDB. Jedna z moich metod wykonuje aktualizację (AWS.DynamoDB.DocumentClient(). Update) na DynamoDB, aby zaktualizować konkretny element. Mój problem polega jednak na tym, że gdy próbuję zaktualizować element i ten element nie istnieje, to metoda aktualizacji dodaje ten nowy element do mojej tabeli. To zachowanie jest domyślnie opisane w documentation.DynamoDB: Jak zapobiec tworzeniu nowego elementu w UpdateItem, jeśli element nie istnieje
Nie chcę, aby moja metoda tworzyła nowy element, jeśli jeszcze nie istnieje. Chcę, żeby była to aktualizacja tylko wtedy, gdy istnieje zapis. Jeśli nie istnieje, nie może nic zrobić. Jak to osiągnąć? Oczekuję, że będę mógł użyć ConditionalExpression, aby to osiągnąć, ale próby, które zrobiłem, nie zakończyły się sukcesem.
Przykład bieżących parametrów wysyłanych do funkcji aktualizacji podano poniżej. W tym przykładzie chcę zaktualizować użytkownika, który ma userid 123 i chcę ustawić pole isActive do „false” dla tego użytkownika (ale tylko chcesz to zrobić, jeśli użytkownik 123 rzeczywiście istnieje!)
const params = {
TableName: 'users',
Key: {
userId: '123',
},
ExpressionAttributeValues: {
':isActive': 'false'
},
UpdateExpression: 'SET isActive = :isActive',
ReturnValues: 'ALL_NEW',
};
Jest to jedna z opcji, które faktycznie wypróbowałem. Kiedy to zrobię, otrzymuję wyjątek, ValidationException: Wartość podana w wyrażeniach ExpressionAttributeValues nieużywanych w wyrażeniach: keys: {: userIdVal} – Stanley
Wygląda na to, że nie podano wartości userIdVal w wyrażeniu. Czy włączono tę część "userId =: userIdVal" w ConditionExpression? – notionquest
Rzeczywiście mam i sprawdziłem pisownię i składnię. – Stanley