如何解决在DynamoDB中创建嵌套地图
我正在尝试创建一个新地图,并同时为其分配一个新值
这是我要存储在数据库中的数据格式:
{
"user_id": 1,"project_id": 1,"MRR": {
"NICHE": {
"define your niche": {
"vertical": "test","ideal prospect": "He is the best"
}
},"Environment": {
"Trend 1": {
"description": "something"
},"Trend 2": {
"description": "something else"
}
}
}
}
到目前为止,我用于插入数据的代码是:
def update_dynamo(user_id,project_id,group,sub_type,data):
dynmoTable.update_item(
Key = {
"user_id": user_id
},ConditionExpression=Attr("project_id").eq(project_id),UpdateExpression="SET MRR.#group = :group_value",ExpressionAttributeNames={
"#group": group
},ExpressionAttributeValues={
":group_value": {}
}
)
dynmoTable.update_item(
Key={
"user_id": user_id
},UpdateExpression="SET MRR.#group.#subgroup = :sub_value",ExpressionAttributeNames={
"#group": group,'#subgroup': sub_type
},ExpressionAttributeValues={
":sub_value": data
}
)
data = {
"description": "world",}
if __name__ == "__main__":
update_dynamo(1,1,"New Category","Hello",data)
我的问题是,这2个update_items是否可以合并为一个?
解决方法
当然,您可以将整个嵌套的“文档”分配给顶级属性,而无需只分配标量。
类似的事情应该起作用:
dynmoTable.update_item(
Key = {
"user_id": user_id
},ConditionExpression=Attr("project_id").eq(project_id),UpdateExpression="SET MRR.#group = :group_value",ExpressionAttributeNames={
"#group": group
},ExpressionAttributeValues={
":group_value": {sub_type: sub_data}
}
)
请注意如何将“ group”属性设置为Python字典{subtype: sub_data}
。如您所料,boto3会将此字典转换为适当的DynamoDB映射属性。您可以通过一次更新来设置彼此嵌套的复杂嵌套字典,列表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。