繁体   English   中英

带有JavaScript的AWS DynamoDB事务:一个或多个参数值无效

[英]AWS DynamoDB Transactions with JavaScript: One or more parameter values were invalid

救救我,欧比万...

我正在尝试做一个docClient.transactWrite(params) ,其中我的params看起来像(也有其他字段,试图将其保持简短):

{
  "TransactItems": [
    {
      "Put": {
        "Item": {
          "slug": {
            "S": "marbled_crockpot_cheesecake"
          },
          "tag": {
            "S": "metadata"
          },
          "recipe_name": {
            "S": "Marbled Crockpot Cheesecake"
          }
        },
        "TableName": "recipes-table-dev"
      }
    },
    {
      "Put": {
        "Item": {
          "slug": {
            "S": "marbled_crockpot_cheesecake"
          },
          "tag": {
            "S": "marbled"
          },
          "recipe_name": {
            "S": "Marbled Crockpot Cheesecake"
          }
        },
        "TableName": "recipes-table-dev"
      }
    }
  ]
}

通过查看此示例官方文档可以知道, 很好,但是每当我运行它时,都会出现以下错误:

ERROR   Error performing transactWrite { cancellationReasons:
[ { Code: 'ValidationError',
Message:
'One or more parameter values were invalid: Type mismatch for key slug
 expected: S actual: M' } ],

我应该指出,主分区键是slug (String)和主排序键tag (String) 因此,我不了解Type mismatch for key slug expected: S actual: MType mismatch for key slug expected: S actual: M短语:如果期望S ,那是我发送的,对吗? 我在任何地方都看不到M

使用文档客户端 (提供比DynamoDB更高级别的API)时,请注意以下几点:

文档客户端通过抽象化属性值的概念,简化了在Amazon DynamoDB中处理项目的工作。 此抽象对作为输入参数提供的本机JavaScript类型进行注释,并将带注释的响应数据转换为本机JavaScript类型

文档客户端为开发人员提供了使用本地JavaScript类型而非AttributeValue的功能,以简化Amazon DynamoDB的JavaScript开发体验。 作为参数传入的JavaScript对象被编组为Amazon DynamoDB所需的AttributeValue形状。 DynamoDB的响应被DocumentClient解组到普通的JavaScript对象中。 DocumentClient 不接受AttributeValue来支持本机JavaScript类型

这意味着, slug必须是纯字符串( S ),而不是具有属性类型的映射( M )。

以下应该工作:

{
  "TransactItems": [
    {
      "Put": {
        "Item": {
          "slug": "marbled_crockpot_cheesecake",
          "tag": "metadata",
          "recipe_name": "Marbled Crockpot Cheesecake",
        },
        "TableName": "recipes-table-dev"
      }
    },
    {
      "Put": {
        "Item": {
          "slug": "marbled_crockpot_cheesecake",
          "tag": "marbled",
          "recipe_name": "Marbled Crockpot Cheesecake"
        },
        "TableName": "recipes-table-dev"
      }
    }
  ]
}

直接使用DynamoDB (较低级别)时,必须指定属性类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM