【问题标题】:Only update the field where new value bigger than old - DynamoDB - Lambda function仅更新新值大于旧值的字段 - DynamoDB - Lambda 函数
【发布时间】:2018-05-25 04:43:17
【问题描述】:

我在 DynamoD 中有一个具有以下结构的表:

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

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

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

我预计会替换 s1 的分数并替换 s10 和 s1001 的值。所以表中 item 的新值必须是: s1:6354,s10:2000,s1001:4567

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

那么,请让我知道这个问题有什么解决方案吗? 谢谢!

【问题讨论】:

  • 你能分享你发送到更新功能的对象吗?
  • 我认为您必须扫描才能获取数据库中的当前值。之后将当前值与发送值进行比较,以通过逻辑保持更大来生成新数据。并使用 updateItem 通过新值更新当前值。

标签: aws-lambda amazon-dynamodb


【解决方案1】:

假设您还在 new 键中采用 dynamodb 中的新值,而您在 temp 键中的先前值实际上位于 facebook Id string 中,您可以在 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}
        })

更新后的表格会是这样的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2014-02-05
    • 2020-01-18
    • 2019-07-02
    相关资源
    最近更新 更多