Tôi đang chạy dịch vụ AWS Lambda được viết bằng Node.js tương tác với cơ sở dữ liệu DynamoDB. Một trong những phương pháp của tôi thực hiện cập nhật (AWS.DynamoDB.DocumentClient(). Update) trên DynamoDB để cập nhật một mục cụ thể. Tuy nhiên, vấn đề của tôi là khi tôi cố cập nhật một mục và mục đó không tồn tại, thì phương thức cập nhật sẽ thêm mục mới này vào bảng của tôi. Hành vi này là mặc định được mô tả trong số documentation.DynamoDB: Cách ngăn chặn tạo mục mới trong UpdateItem nếu mục không tồn tại
Tôi không muốn phương pháp tạo mục mới nếu nó chưa tồn tại. Tôi muốn đây chỉ là bản cập nhật nếu bản ghi tồn tại. Nếu nó không tồn tại, nó không phải làm gì cả. Làm thế nào để đạt được điều này? Tôi hy vọng tôi sẽ có thể sử dụng một ConditionalExpression để đạt được điều này, nhưng những nỗ lực tôi đã thực hiện khi làm điều này đã không thành công.
Ví dụ về các tham số hiện tại mà tôi gửi đến chức năng cập nhật được đưa ra dưới đây. Trong ví dụ này tôi muốn cập nhật cho người dùng biết có userId 123 và tôi muốn thiết lập các lĩnh vực IsActive để 'false' cho người dùng này (nhưng tôi chỉ muốn làm điều này nếu người dùng 123 thực sự tồn tại!)
const params = {
TableName: 'users',
Key: {
userId: '123',
},
ExpressionAttributeValues: {
':isActive': 'false'
},
UpdateExpression: 'SET isActive = :isActive',
ReturnValues: 'ALL_NEW',
};
Đây là một trong các tùy chọn tôi đã thực sự thử. Khi tôi làm điều này tôi nhận được một ngoại lệ, ValidationException: Giá trị được cung cấp trong ExpressionAttributeValues không được sử dụng trong các biểu thức: các khóa: {: userIdVal} – Stanley
Có vẻ như bạn chưa cung cấp userIdVal trong biểu thức. Bạn đã bao gồm phần này "userId =: userIdVal" trong ConditionExpression chưa? – notionquest
Thật vậy, tôi đã kiểm tra chính tả và cú pháp. – Stanley