首页 文章

使用列表的新属性更新DynamoDB项

提问于
浏览
0

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

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

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

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

现在我在JS中使用AWS-SDK这样做:

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

但是,我收到一个错误:

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

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

那么我做错了什么?

1 回答

  • 0

    尝试ADD而不是SET

    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

    希望这可以帮助 .

相关问题