【问题标题】:Updating a DynamoDB item with a new attribute that's a list使用列表的新属性更新 DynamoDB 项目
【发布时间】:2018-02-17 19:39:50
【问题描述】:

所以我在 DynamoDB 中有一个项目:

{
  "id": "1",
  "foo": "bar"
}

我想为该项目添加一个新属性,该属性为:

{
  "newAttr": [{ "bar": 1 }, { "bar": 2 }, { "bar": 3 }]
}

现在我正在使用 AWS-SDK 在 JS 中执行此操作,如下所示:

client.update({
  ExpressionAttributeNames: { '#newAttr': 'newAttr' },
  ExpressionAttributeValues: { ':newAttr': newAttr },
  Key: { "id": "1" },
  TableName: "foo",
  UpdateExpression: "SET #newAttr = :newAttr"
}, callback)

但是,我收到一个错误:

ExpressionAttributeValues 包含无效值:一个或多个 参数值无效:AttributeValue 可能不包含 键的空字符串:newAttr

所以如果我是JSON.stringify(newAttr),那很好,但我不希望这个新属性是一个字符串,我希望它是一个列表。

那我做错了什么?

【问题讨论】:

    标签: amazon-dynamodb


    【解决方案1】:

    尝试添加而不是设置

        client.update({
      ExpressionAttributeNames: { '#newAttr': 'newAttr' },
      ExpressionAttributeValues: { ':newAttr': newAttr },
      Key: { "id": "1" },
      TableName: "foo",
      UpdateExpression: "ADD #newAttr = :newAttr"
    }, callback)
    

    我一开始就遇到了这些问题。我确定您在编写与 DynamoDB 交互的所有低级代码是在浪费时间。

    使用 ODM(ORM Like)进行文档存储,为您处理所有障碍。

    https://github.com/clarkie/dynogels

    是我用过的,会让你的生活更轻松。

    不允许空字符串

    无法在根级别使用 DynamoDB 存储空字符串。您可以在嵌套对象中使用它。

    DynamoDB 中允许的数据类型:

    http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html

    希望这会有所帮助。

    【讨论】:

    • 不幸的是,这不起作用。事实证明,对象的空字符串值更远是一个问题。感谢ODM的建议,我一定会看看它是否可以缓解空字符串的痛苦。
    猜你喜欢
    • 2018-09-24
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 2019-02-16
    相关资源
    最近更新 更多