栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

更新嵌套地图dynamodb

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

更新嵌套地图dynamodb

更新的答案-基于更新的问题陈述

您可以使用更新表达式来更新嵌套地图中的属性,以便仅更新项目的一部分(即DynamoDB将对项目应用补丁的等效项),但是由于DynamoDB是文档数据库,因此所有操作(输入,获取,更新,删除等)对整个项目进行操作。

因此,在您的示例中,假设

User
是分区键,并且没有排序键(在该示例中我没有看到任何可能是排序键的属性),那么更新请求可能如下所示:

table.update_item(  Key={    'User': 'test'  },  Updateexpression="SET #inv[0].#loc = :locVal",  expressionAttributeNames={    '#inv': 'inventory',    '#loc': 'location'  },  expressionAttributevalues={    ':locVal': 'in place three',  },)

就是说,您确实必须知道项目架构的外观以及应该正确更新项目中的哪些属性。

DynamoDB无法对子项目进行操作。意思是,没有办法告诉Dynamo执行诸如
“更新项目,设置’库存’数组中具有’名称’等于’欧宝’的元素的’位置’属性”之类的操作”

这可能不是您想要的答案,但这是今天可用的答案。您可以通过稍微更改架构来更接近所需的内容。

如果需要按名称引用子项,则可以存储以下内容:

{  "inventory": {    "opel": {       "location": "in place one",      # I want to update this       "tags": [ "x1", "f3" ]    },    "abc": {       "location": "in place two",       "tags": [ "a3", "f5" ]    }  },  "User" :"test" }

那么您的查询将是:

table.update_item(  Key={    'User': 'test'  },  Updateexpression="SET #inv.#brand.#loc = :locVal",  expressionAttributeNames={    '#inv': 'inventory',    '#loc': 'location',    '#brand': 'opel'  },  expressionAttributevalues={    ':locVal': 'in place three',  },)

但是YMMV还是有局限性,因为您只能按名称标识库存商品(即,您仍然不能说“使用标签’x1’更新库存”)

最终,您应该仔细考虑为什么需要Dynamo来为您执行这些复杂的操作,而不是具体说明要更新的内容。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646990.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号