如何通过所述列表中的Map属性值从DynamoDB地图列表中删除?

时间:2015-12-02 19:45:42

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

我有以下列表示例:

=if(OR(AND(Field1>=400000,Field1<>440400,Field1<>440600,Field1<>440300),
   AND(Field5<110,Field5>105))

我想删除地图:{ "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" }

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

我以前在Python中使用Boto3库而不是在Javascript中完成此操作。我有一个link到Javascript删除项功能。我在Python中做的是我queried我的表项目,并列出我想要删除的对象的主键,并调用删除功能。

答案 2 :(得分:-1)

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

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

How to parse JSON using Node.js?