javascript - 如何通过所述列表中的 map 属性值从 DynamoDB map 列表中删除?

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

我有以下列表示例:

{
  "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"
}

我想删除 map :"entityId": "558da3de395b1aee2d6b7d2b"

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

最佳答案

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

A.使用 map 而不是列表,您现在可以使用 #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

关于javascript - 如何通过所述列表中的 map 属性值从 DynamoDB map 列表中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34051638/

相关文章:

node.js - Alexa 技能中的搜索功能

amazon-web-services - 通过 CloudWatch Events 检测 EC2 实例是否是 CloudFormation 的一部分

Javascript/Jquery - 从字符串中获取数字

javascript - Angularjs - 如何遍历、添加和删除嵌套数组中的元素

javascript - NodeJs - FTP 不工作 : "npm-shrinkwrap.json is not provided"

amazon-web-services - 使用 AWS 自动缩放终止实例?

android - 来自 Android 的所有 S3 调用都出现 504 错误

javascript - Gridview 排序后运行回调

javascript - 如何在 JavaScript 中使用嵌套的 setTimeout() 函数打破 for 循环?

javascript - 咕噜声 : Custom Task - No "taskname" targets found