首页 > 解决方案 > DynamoDB 异常 - 提供的 AttributeValue 设置了多个数据类型

问题描述

我正在尝试在 DynamoDB 中进行批量写入,但它失败了。

TableName -  td_notes_learn
PK user_id - String
SK datetime - Number 

我的尝试:

const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });

const docClient = new AWS.DynamoDB.DocumentClient();

docClient.batchWrite(
  {
    RequestItems: {
      td_notes_learn: [
        {
          DeleteRequest: {
            Key: {
              user_id: "D",
              datetime: 5
            }
          },
          PutRequest: {
            Item: {
              user_id: "G",
              datetime: 5,
              content: "HELLO WORLD"
            }
          }
        }
      ]
    }
  },
  (err, data) => {
    if (err) {
      console.log("Error found" + err);
    } else {
      console.log(data);
    }
  }
);

例外 :

错误 foundValidationException:提供的 AttributeValue 设置了多个数据类型,必须恰好包含一种受支持的数据类型

此外,在同一个代码中,如果我通过注释另一个代码来单独运行DeleterRequest和请求,代码工作正常,只有当我一起运行时才会出现错误。PutRequest请指导我。

标签: node.jsamazon-web-servicesamazon-dynamodb

解决方案


看起来所有请求都需要是一个单独的 json 对象,而我的代码中的问题是所有请求都在一个 json 对象中。下面是工作代码。

docClient.batchWrite(
  {
    RequestItems: {
      td_notes_learn: [
        {
          DeleteRequest: {
            Key: {
              user_id: "D",
              datetime: 5
            }
          }
        }, // WAS MISSING
        {  // WAS MISSING
          PutRequest: {
            Item: {
              user_id: "G",
              datetime: 5,
              content: "HELLO WORLD"
            }
          }
        } // WAS MISSING
      ]
    }
  },
  (err, data) => {
    if (err) {
      console.log("Error found" + err);
    } else {
      console.log(data);
    }
  }
);

推荐阅读