В моей базе данных есть элемент (type: 'TOTAL'
), который сообщает мне, сколько существует элементов определенного типа (type: 'CONFIG'
). Когда я удаляю элемент CONFIG
, я хочу уменьшить число, сохраненное в TOTAL
. TOTAL
не обязательно существует, поэтому я хочу установить его в 0, если он не существует, или вычесть 1 из его текущего значения, если он существует.
if total exists
total = total - 1
else
new total = 0
Я использую UpdateItem, потому что у меня нет никакой информации о элементе TOTAL
до выполнения этого запроса. Если я использую ADD и TOTAL
еще не существует, он установит значение в 0, а затем вычтет 1 вместо того, чтобы просто установить его в 0, как я хочу. Я попытался использовать SET с if_not_exists вместо этого, но он не будет принимать операнд в случае, если элемент существует, то есть когда я хочу, чтобы он вычел 1.
Вот мой текущий запрос, которыйзапускается, когда я вызываю функцию для удаления элемента CONFIG
:
aws dynamodb update-item \
--table-name application \
--key '{"type":{"S":"TOTAL"},"id":{"S":"CONFIG"}}' \
--update-expression "SET TotalConfigs = if_not_exists(TotalConfigs-1,:z)" \
--expression-attribute-values '{":z":{"N":"0"}}'
Я получаю ошибку
An error occurred (ValidationException) when calling the UpdateItem operation:
Invalid UpdateExpression: Syntax error; token: "-", near: "TotalConfigs-1"
Меня это не удивляет, поскольку я понимаю, что этоне работаетЕсть ли способ сделать то, что я хочу, без использования нескольких запросов?