只更新新值大于旧的字段 - DynamoDB - Lambda函数

时间:2018-05-25 04:43:18

标签: aws-lambda amazon-dynamodb

我在DynamoD中有一个表结构: enter image description here

现在,当用户调用我的lambda函数并添加新分数时。 在这种情况下,我必须更新新值大于旧值的字段。

示例:  s1的当前值:6354,s10:1513,s1001:328

如果用户发送新值:s1:1000,s10:2000,s1001:4567

我希望将替换s1的分数并替换s10和s1001的值。所以表中项的新值必须是:    s1:6354,s10:2000,s1001:4567

我阅读了AWS文档,但据我所知,当我检查更新的条件时,我只有2个选项:用新项替换当前项(updateItem时params中的哪个字段)或保留当前项。

那么,请告诉我这个问题有什么解决方法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

假设您还在键中使用了dynamodb中的新值,并且 temp 键中的先前值实际上在facebook Id字符串enter image description here中,你可以在lambda中使用python这样做:

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