【问题标题】:Update data with filter on Dynamo Db with Php Sdk使用 Php Sdk 在 Dynamo Db 上使用过滤器更新数据
【发布时间】:2023-02-03 18:40:23
【问题描述】:

我有这个 DynamoDb 表:

ID customer_id product_code date_expire
3 12 TRE65GF 2023-11-15
5 12 WDD2 2023-11-15
4 44 BT4D 2023-06-23

在 DynamoDb 中,将“date_expire”字段更新为具有相同 customer_id 的所有客户的最佳方法是什么?

例如,我想将 customer_id = "12" 的所有数据的 date_expire 设置为 "2023-04-17"。

我应该做一个扫描表的提取所有的“ID”,然后写入请求批处理? 或者有没有更快的方法,比如普通的 sql 查询(“update table set field=value where condition=xx”)?

【问题讨论】:

    标签: amazon-dynamodb dynamodb-queries


    【解决方案1】:

    亚马逊 DynamoDB,没有直接的方法来更新具有相同条件的多个项目(例如customer_id = "12")。更新多个项目的推荐方法是扫描表以提取所有符合条件的“ID”(就像你提到的那样),然后使用UpdateItem API执行批量写入操作以更新“date_expire”每个匹配项的字段。

    这是我用 Python 为您编写的示例脚本:

    import boto3
    
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('YourTableName')
    
    # Scan the table for items with customer_id = "12"
    response = table.scan(FilterExpression='customer_id = :value', ExpressionAttributeValues={':value': '12'})
    
    # Create a batch write request for each matching item
    with table.batch_writer() as batch:
        for item in response['Items']:
            batch.update_item(Key={'ID': item['ID']},
                               UpdateExpression='SET date_expire = :value',
                               ExpressionAttributeValues={':value': '2023-04-17'})
    

    请注意:批量写入操作每次操作最多可执行 25 个写入请求,因此如果您有超过 25 个匹配项,则需要将请求分成多个批次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2021-04-12
      相关资源
      最近更新 更多