【问题标题】:How do I delete from DynamoDB List of Maps, by Map attribute value in said List?如何按所述列表中的 Map 属性值从 DynamoDB 地图列表中删除?
【发布时间】:2016-03-07 05:16:02
【问题描述】:

我有以下列表示例:

{
  "favorites": [
    {
      "createdAt": 1448998673852,
      "entityId": "558da3de395b1aee2d6b7d2b",
      "type": "media"
    },
    {
      "createdAt": 1448998789252,
      "entityId": "558da3de395b1aee2d6b7d83",
      "type": "media"
    },
    {
      "createdAt": 1448998793729,
      "entityId": "558da3de395b1aee2d6b7d99",
      "type": "media"
    },
    {
      "createdAt": 1448998813023,
      "entityId": "558da3de395b1aee2d6b7daf",
      "type": "media"
    }
  ],
  "userId": "2"
}

我想删除地图:"entityId": "558da3de395b1aee2d6b7d2b"

我正在考虑一个 UpdateItem 查询,我查看了 REMOVE 表达式文档 (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html),但除了按索引值从列表中删除项目之外,我似乎看不到任何示例......

【问题讨论】:

  • 我面临着类似的问题。你找到解决方案了吗?
  • 同上。我也遇到了麻烦。

标签: javascript node.js amazon-web-services amazon-dynamodb


【解决方案1】:

您应该将对象反序列化为您可以使用的东西,修改它以删除该条目,然后使用 update-item 保存更改。

我不是 node.js 用户,但你最初是如何创建对象的?你是手工制作 json 字符串吗?如果是这样,你不应该。有一些库可以处理 json,并且让您可以轻松地对其进行修改,然后通过更改获取生成的 json 字符串。

How to parse JSON using Node.js?

【讨论】:

  • 这里建议的方法的问题是它不是原子的。如果两个客户端大约在同一时间读取该项目,当他们都写回该项目时,其中一个更改将丢失。
  • 这没有回答通过列表中位置以外的特征从 DynamoDB 列表中删除项目的问题。
【解决方案2】:

我已经遇到过几次这个问题,不幸的是没有直接的解决方案。我遇到的两种最常见的解决方法是:

A.使用地图而不是列表,您现在可以使用#favorites.#entityId 在更新表达式中直接引用收藏夹。如果 order 很重要,请为每个 map 添加 order 属性。在您的数据访问层中,您需要在所需的数组类型之间进行转换。

{
  "userId": "2",
  "favorites": {
    "558da3de395b1aee2d6b7d2b": {
      "createdAt": 1448998673852,
      "entityId": "558da3de395b1aee2d6b7d2b",
      "type": "media",
    },
    // ... more entities here
  }
}

B.改为使用一对多表,请参阅http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForItems.html

【讨论】:

    【解决方案3】:

    我以前在 Python 中使用 Boto3 库做过这个,但不是在 Javascript 中。我有一个link 到 Javascript 删除项目功能。我在 Python 中所做的是我 queried 我的表中的项目,并列出我想要删除的对象的主键并调用删除函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2020-03-14
      相关资源
      最近更新 更多