Обновлять только те поля, где новое значение больше старого - DynamoDB - Лямбда-функция - PullRequest
0 голосов
/ 25 мая 2018

У меня есть таблица в DynamoD со структурой: enter image description here

Теперь, когда пользователь вызывает мою лямбда-функцию и ставит новый счет.В этом случае мне нужно обновить поле, новое значение которого больше старого значения.

Пример : текущее значение s1: 6354, s10: 1513, s1001: 328

Если пользователь отправит новое значение: s1: 1000, s10: 2000, s1001: 4567

Я ожидаю, что заменит оценку s1 и заменит значения s10 и s1001.Таким образом, новое значение элемента в таблице должно быть: s1: 6354, s10: 2000, s1001: 4567

Я прочитал документ AWS, но понял, что при проверке обновленного условия у меня есть только 2 варианта: заменить текущий элемент новым элементом (какое поле в параметрах при updateItem) или сохранить текущий элемент.

Итак, пожалуйста, дайте мне знать, есть ли решение этой проблемы?Спасибо!

1 Ответ

0 голосов
/ 25 мая 2018

при условии, что вы также принимаете новые значения в DynamodB в ключе new и ваши предыдущие значения в ключе temp , которые фактически находятся в строке идентификатора facebook enter image description here, вы можете сделать это, используя python в lambda:

import boto3

dynamodb = boto3.client('dynamodb')
response_old = dynamodb.get_item(
    TableName='test',
    Key={'name': {'S': 'temp'}}              
    )
response_new = dynamodb.get_item(
    TableName='test',
    Key={'name': {'S': 'new'}}              
    )

olds1001=response_old['Item']['s1001']['N']
olds10=response_old['Item']['s10']['N']
olds1=response_old['Item']['s1']['N']

news1001=response_new['Item']['s1001']['N']
news10=response_new['Item']['s10']['N']
news1=response_new['Item']['s1']['N']


if (olds1001>news1001):
    news1001=olds1001
if (olds10>news10):
    news10=olds10
if (olds1>news1):
    news1=olds1

dynamodb.put_item(
        TableName='test',
        Item={
            'name': {'S': 'temp'},
            's1': {'N': news1},
            's10': {'N': news10},
            's1001': {'N': news1001}
        })

обновленная таблица будет выглядеть следующим образом

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...