Документы DynamoDB не имеют фиксированной схемы за пределами ваших разделов и ключей сортировки, поэтому нет никакого способа применить ограничение к полю.
К сожалению, вы также не можете выполнить «увеличение с помощью cap» за одну операцию. Поддержка выражений обновлений DynamoDB для реальных приложений очень плохая.
Вы можете воспользоваться условными выражениями, чтобы остановить обновление, если оно превысит ограничение:
UpdateExpression: 'SET info.rating = info.rating + :val',
ConditionExpression: 'info.rating <= :maxAllowed' // Where :maxAllowed = :cap - :val
Если это приводит к ошибке условной проверки, вы знаете, что добавление к существующему значению превысит ограничение, поэтому вы можете выполнить другую операцию, чтобы попытаться установить его в ограничение:
UpdateExpression: 'SET info.rating = :cap',
ConditionExpression: 'info.rating > :maxAllowed'
Если это снова не удается, вы можете вернуться назад и повторить первую операцию, потому что что-то уменьшило значение между операциями.
Однако, если ваш сценарий использования предполагает, что приращение часто достигает предела, вам может оказаться дешевле просто выполнить чтение и запись, поскольку это значительно дешевле, чем две записи. Вы должны все еще использовать выражение условия, чтобы гарантировать, что запись не превышает ограничение.