如何使用 nodeJS 从 DynamoDB 中 table 的项目列表中删除地图?
How to delete a map from list in an Item of a table in DynamoDB using nodeJS?
我正在开发一个应用程序,我正在使用 AWS DynamoDB 作为数据库服务器。 DB 与 nodeJS 连接。我有一个名为 chat 的 table 来存储消息。在 chat table 中,每个项目都有 connectionid 作为分区键。一个项目看起来像这样
{“id”:“123456”,“消息”:[{“id”:“1214545”,“消息”:“ksadfksfmsfsdf”,“发件人”:“112415”,
“时间戳”:“27:1:2022:11:53”}]}
这是一个项目,聊天中还有更多项目table。
我一直在尝试删除项目中的一条消息。我很容易删除整个项目,因为 connectionid 是分区键。但是我想针对嵌套的 id 删除它。如何实现?
But I want to delete with respect to id which is nested. How to to achieve this?
不,你不能。不可能在嵌套键上有嵌套主键或二级索引。
我建议改造您的 table 架构,您可以使用 复合键 例如:
- 保持消息数组不变,只是把id从嵌套中去掉。
- 您可以将
"id": "123456"
作为 排序键 和 "id": "1214545" 作为 主键.
- 两者的结合将使您能够找到唯一的记录并将其删除。
- 如果您想删除所有消息(多条消息),您可以使用主键为 key = "id": "1214545" 的查询操作将其删除。
或者一个非常简单的解决方案是将消息 ID 作为您的单个主键,如果它对于所有记录都是唯一的的话。
注意:- 在复合键中,主键可以具有相同的值,但排序键应该始终不同。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey
我正在开发一个应用程序,我正在使用 AWS DynamoDB 作为数据库服务器。 DB 与 nodeJS 连接。我有一个名为 chat 的 table 来存储消息。在 chat table 中,每个项目都有 connectionid 作为分区键。一个项目看起来像这样
{“id”:“123456”,“消息”:[{“id”:“1214545”,“消息”:“ksadfksfmsfsdf”,“发件人”:“112415”, “时间戳”:“27:1:2022:11:53”}]}
这是一个项目,聊天中还有更多项目table。
我一直在尝试删除项目中的一条消息。我很容易删除整个项目,因为 connectionid 是分区键。但是我想针对嵌套的 id 删除它。如何实现?
But I want to delete with respect to id which is nested. How to to achieve this?
不,你不能。不可能在嵌套键上有嵌套主键或二级索引。
我建议改造您的 table 架构,您可以使用 复合键 例如:
- 保持消息数组不变,只是把id从嵌套中去掉。
- 您可以将
"id": "123456"
作为 排序键 和 "id": "1214545" 作为 主键. - 两者的结合将使您能够找到唯一的记录并将其删除。
- 如果您想删除所有消息(多条消息),您可以使用主键为 key = "id": "1214545" 的查询操作将其删除。
或者一个非常简单的解决方案是将消息 ID 作为您的单个主键,如果它对于所有记录都是唯一的的话。
注意:- 在复合键中,主键可以具有相同的值,但排序键应该始终不同。 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.PrimaryKey