当前位置: 首页 > 知识库问答 >
问题:

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

燕禄
2023-03-14

因此,我在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)

但是,我得到一个错误:

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

所以如果我是JSON。stringify(newAttr)这样就可以了,但我不希望这个新属性是一个字符串,我希望它是一个列表。

那么我做错了什么?

共有1个答案

孙帅
2023-03-14

尝试添加而不是设置

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

我一开始就有这些问题。我肯定你在浪费时间编写所有与DynamoDB交互的低级代码。

使用ODM(类似于ORM)进行文档存储,它可以为您解决所有障碍。

https://github.com/clarkie/dynogels

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

不允许使用空字符串

使用DynamoDB不能在根级别存储空字符串。您可以在嵌套对象中拥有它。

DynamoDB中允许的数据类型:

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

希望这能有所帮助。

 类似资料:
  • 这看起来应该很简单,但我没有找到任何例子或留档。我有一个看起来像这样的Dynamodb表: 记录1:{姓名、电子邮件、项目[{product}、{item2}、{item3]} 记录2:(姓名、电子邮件、项目[{product}、{item2}、{item3]} 我需要能够更新items元素,即更新记录1中的item1对象。我可以通过硬编码list数组元素使用以下代码来实现这一点,但我不知道如何将

  • 我是8Java的新手。我有一个A类对象的列表,其中A的结构如下: 现在我有了一个类A的元素L的列表,在这个列表中,我想用inactive=false更新一个名为name="test "的元素。 我可以通过编写for循环并创建一个新列表来非常轻松地做到这一点。 但是我如何使用Java8流API呢?

  • 只有当新项目的日期比现有项目更近时,我才想更新DynamoDB中的项目。目前,我正在查询现有项目,在代码中进行比较,然后写入数据库。我想知道是否有办法让DynamoDB为我进行检查。我已经研究过使用预期,但是它的比较运算符需要引入一个参数,这违背了目的,因为这意味着无论如何都必须查询现有项目。 我和8Java一起工作。

  • 是否有一种方法可以使用某种表达式重新映射属性名称,以便以以下形式获得数据输出: 我目前使用JavaScript的array.foreach处理数据,但是,我试图避免这种情况,而宁愿利用DynamoDB进行计算。

  • 问题内容: 我在SQL Server 2008中有一个表,其中有一些列。这些列之一是Xml格式,我想更新一些属性。 例如,我的Xml列的名称为,它在前5行中的值如下: 我想将所有属性设置为30到40,如下所示: 问题答案: 从问题的早期版本看来,您的XML实际上位于表的不同行上。在这种情况下,您可以使用此功能。 使用表变量的工作样本。

  • 我试图更新DynamoDB表中的项目。我写的代码正在更新项目,但是当我添加一个标题为“源代码/目标”的列时,它会给出一个“验证异常”异常。 用于更新的代码- 我得到的错误是- 调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:语法错误;标记:\“/\”,靠近:\“源/目标” 这个怎么解决?