如何更新dynamo db中的项目集合?
问题描述:
我有发电机如下表:如何更新dynamo db中的项目集合?
id | comment_ids | updated_at
1 [12, 123] '2017-09-09'
当新的评论已经到达(如11
)如何更新相应的id
获得:
id | comment_ids | updated_at
1 [12, 123, 11] '2017-09-09'
答
我不是一个Python开发,但是你想使用的API是UpdateItem。
如果属性“comment_ids”的数据类型是一组:
{
"TableName": "XXX",
"Key": {
"id": {
"N": "1"
}
},
"UpdateExpression": "ADD #cid :new_cid",
"ExpressionAttributeNames": {
"#cid": "comment_ids"
},
"ExpressionAttributeValues": {
":new_cid": {"N": "11" }
}
}
如果属性“comment_ids”的数据类型是一个列表:
{
"TableName": "XXX",
"Key": {
"id": {
"N": "1"
}
},
"UpdateExpression": "SET #cid = list_append(#cid, :new_cid)",
"ExpressionAttributeNames": {
"#cid": "comment_ids"
},
"ExpressionAttributeValues": {
":new_cid": {"N": "11" }
}
}
请记住,设置和列表之间的区别docs:
集 集只能是一个标量型的个空集不支持集内 排序不保留 每个值都必须是唯一
列表 列表类型的属性可以存储值的有序集合。列表括在方括号中:[...]
列表与JSON数组类似。对于可以存储在列表元素中的数据类型没有限制,并且列表元素中的元素不必具有相同的类型。
答
相应地使用操作符或函数来追加到列表或设置。
- 算ADD - 如果数据类型被设置(即,SS)
- 功能
list_append
- 如果数据类型是列表(即L)
追加到列表: -
1)定义列表并使用它在ExpressionAttributeValues
(ie idVals)
idVal = [11]
response = table.update_item(
Key={
'#id': 1992
},
UpdateExpression="SET comment_ids = list_append(comment_ids , :idVal)",
ExpressionAttributeValues={
':idVal': idVal
},
ExpressionAttributeNames={
'#id' : 'id'
},
)
附加到组: -
1)定义集合和在ExpressionAttributeValues
使用它(即idVals)
idVals = set([11])
response = table.update_item(
Key={
'#id': 1999
},
UpdateExpression="ADD comment_ids :idVal",
ExpressionAttributeValues={
':idVal': idVals
},
ExpressionAttributeNames={
'#id' : 'id'
},
)
comment_ids的dynamodb数据类型是什么?它是设置还是列出? – notionquest