gpt4 book ai didi

amazon-web-services - 更新 dynamodb 中的列表项

转载 作者:行者123 更新时间:2023-12-04 08:11:26 26 4
gpt4 key购买 nike

我在 AWS DynamoDB 中的数据结构如下所示:

{ key: 'roomNameOne', 
value: {
attendees: ['A', 'B', 'C'] // this is a set,
wsConnections: [{ connectiondId: 'foo', domain: 'xyz.com' }, { connectiondId: 'bar', domain: 'xyz.com' }]
}
}
{ key: 'roomNameTwo', 
value: {
attendees: ['X', 'Y', 'Z'],
wsConnections: [{ connectiondId: 'foo', domain: 'xyz.com' }, { connectiondId: 'bar', domain: 'xyz.com' }]
}
}
现在,当我收到 connectionId: foo 丢失的请求时,我想从所有项目中删除该条目。
所以在 DynamoDB 更新操作之后,我的列表应该是这样的:
{ key: 'roomNameOne', 
value: {
attendees: ['A', 'B', 'C'] // this is a set,
wsConnections: [{ connectiondId: 'bar', domain: 'xyz.com' }]
}
}
{ key: 'roomNameTwo', 
value: {
attendees: ['X', 'Y', 'Z'],
wsConnections: [{ connectiondId: 'bar', domain: 'xyz.com' }]
}
}
你能帮我查询更新吗?这里的技巧是我不知道房间名称,但是在连接时,我知道连接感兴趣的所有房间名称。

最佳答案

不幸的是,DynamoDB 不允许对复杂属性(例如 map 列表)进行此类操作。
使用复杂属性对一对多关系建模是一种有用的模式。但是,这种方法的缺点之一是您将无法执行您所描述的操作类型。
如果您的访问模式需要更新 wsConnections ,您可能会考虑通过创建 wsConnections 的每个条目来对关系建模。在 DynamoDB 中列出它自己的项目。例如
enter image description here
以这种方式存储您的数据将使您更轻松地删除连接。例如,如果您想删除 bar从您的连接,您可以执行以下操作

ddbClient.delete({
TableName: "YOUR_TABLE_NAME",
Key: {PK: "roomNameOne", SK: "wsConnection#bar"}
})

编辑:如果您无权访问 PK,您唯一的选择是 scan手术。
ddbClient.scan({
"TableName": "YOUR TABLE NAME",
"FilterExpression": "contains(#key, :value)",
"ExpressionAttributeValues": {
":value": {
"S": "foo"
}
},
"ExpressionAttributeNames": {
"#key": "connections"
}
})
这将 scan整个数据库寻找 connections 的项目属性包含“foo”。这将让您获取项目列表,然后您可以更新并保留回 DDB。
这种方法并不理想。 scan操作将搜索整个数据库,这可能是非常低效的。您还必须向 DDB 发出多个请求;一个获取,一个更新。多次往返并不是世界末日,但同样不理想。
要解锁更灵活、更高效的访问模式,最好从 wsConnections 中获取数据。列表属性。只要数据隐藏在复杂的属性中,您的选择就会受到限制。

关于amazon-web-services - 更新 dynamodb 中的列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65933123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com