Чтобы создать новый элемент или обновить существующий элемент с помощью условного выражения. Предпочитают использовать updateItem вместо putItem .
Если хеш-ключ (первичный ключ) не существует, то putItem
и updateItem
создают новую запись. Если запись уже существует, putItem
полностью переопределит существующую строку, но updateItem
обновит только атрибуты, переданные в UpdateExpression , а не целую запись.
В вашем случае используйте функцию if_not_exists()
, чтобы проверить, существует ли поле created_at
или нет. Если существует, created_at
не будет переопределено.
Обновление выражения: "SET #email = :email, #created_at = if_not_exists(#created_at, :created_at), #updated_at = :updated_at"
Пример фрагмента
var params = {
ExpressionAttributeNames: {
"#email": "email",
"#created_at": "created_at",
"#updated_at": "updated_at"
},
ExpressionAttributeValues: {
":email": {
S: "test2@grr.la"
},
":created_at": {
S: date.toISOString()
},
":updated_at": {
S: date.toISOString()
}
},
Key: {
"id": {
S: "T1"
}
},
ReturnValues: "ALL_NEW",
TableName: "stack",
UpdateExpression: "SET #email = :email, #created_at = if_not_exists(#created_at, :created_at), #updated_at = :updated_at"
};
ddb.updateItem(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data);
})