繁体   English   中英

Boto3 DynamoDB 是否可以在对象列表上执行 update_item

[英]Boto3 DynamoDB is it possible to do update_item on a list of objects

我有一个按用户 ID 排序的表,每个 object 都包含一个对象列表,这些对象具有自己的 ID 和两个属性。 是否可以使用 update_item 来更新其中任一属性,使用 user_id 和 obj_id。 我发现的唯一方法是使用 GET 然后 PUT,感觉它可能更昂贵。

这是我表中的示例条目:

{'id': '0',
 'commands': [{'id': '0', 'command': '', actions: []}, {'id': '1', 'command': '', actions: []}]
}

假设我想在 user_id 0 上更新 id 为 0 的命令,以获得不同的操作列表,我想我可以这样做:

table = dynamodb.Table('commands')
user_id = '0'
command_id = '0'
document = table.get_item(Key={"id": user_id})['Item']
for command in document['commands']:
    if command['id'] == command_id:
        command['actions'] = ['new actions']
        break
table.put(Item=document, ReturnValues="NONE")    

但是有没有一种方法可以更有效地使用 update_item 呢?

我在文档中唯一能找到的是在表达式中使用 list_append,但我不想 append 一个新项目,我想编辑一个现有项目。

我找到这两个问题作为参考,第一个是我在上面得到解决方案的地方,但是我在这里问的问题没有得到回答,我可以使用 update_item 来做到这一点吗?

Boto3 DynamoDB 更新项目的列表属性

如何 append 列出 AWS DynamoDB 上的属性的值?

就相关文档而言,目前还没有可用的BatchUpdate API。

我只能看到这个BatchWriteItem适用于putdelete

BatchWriteItem 操作在一个或多个表中放置或删除多个项目。 对 BatchWriteItem 的一次调用可以写入多达 16 MB 的数据,其中可以包含多达 25 个放置或删除请求。 要写入的单个项目可以大到 400 KB。

BatchWriteItem 无法更新项目。 要更新项目,请使用 UpdateItem 操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM