如何使用 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