amazon-web-services - 如果父级可能不存在,如何有条件地更新 DynamoDB 中的嵌套列表
问题描述
我有下表,主键为“客户”,主条目由位置地图和客户在给定地点购买的物品的字符串集组成
{
"visits": {
"M": {
"location-1": {
"SS": [
"item1",
"item2",
]
},
"location-2": {
"SS": [
"items"
]
}
}
},
"customer": {
"S": "cool-customer-id"
}
}
任务:我需要插入一个新项目,而不从数据库中读取。
如果客户不存在或地图location-53
中不存在,visits
我希望它为特定客户创建一个条目,visits.location-53
并将其设置为包含一个项目“item4”的集合。
如果确实存在,我想将该项目附加到现有集合中。
以下更新表达式仅适用于已经为相同或不同位置插入的给定客户 (PutItem) 的先前条目。
request := &dynamodb.UpdateItemInput{
ConditionExpression: aws.String("not contains (#visits.#place, :newItem)"),
ExpressionAttributeNames: map[string]string{
"#visits": "visits",
"#place": "location53",
},
ExpressionAttributeValues: map[string]dynamotypes.AttributeValue{
":newItem": &dynamotypes.AttributeValueMemberSS{Value: []string{"item4"}},
},
Key: map[string]dynamotypes.AttributeValue{
partitionKeyName: &dynamotypes.AttributeValueMemberS{Value: "some-customer-id-here"},
},
TableName: aws.String("visits"),
UpdateExpression: aws.String("ADD #visits.#place :newItem"),
}
db.UpdateItem(context.Background(), request)
如果客户的条目完全为空,它将返回:
ValidationException:更新表达式中提供的文档路径对更新无效
我怎样才能让它始终工作?
解决方案
推荐阅读
- node.js - 如何通过同步互联网连接改进异步节点获取?
- javascript - 如何在 Node api 中使用 Post 请求提供有效负载数据?
- android - 如何在 Android Posix 中实现 crypt() 和 wordexp.h
- powerbi - 重采样(Pandas Python)但在 PowerBI 中
- dns - 如何解决此“ipv6.google.com 的 DNS 响应 - 错误 28:ResponseTimeout”
- elasticsearch - Elasticsearch 查询以获得每个用户最常用的网站?
- python - 如何将背景/面色分成几部分?
- java - 如何使用 java.sql 从 sql 数据库中提取多个值?
- reactjs - 如何在 Laravel 项目中启动 React 应用程序
- pytorch - 使用 .grad 获取 global_model 的梯度