DynamoDB:ExpressionAttributeNames 中提供的值未在表达式中使用:键:{#date}

Ama*_*day 12 amazon-dynamodb

isRelevant我正在尝试通过更改to的值来更新项目true

       var params = {
              TableName: "test",
              Key: {
                  "#date": data.Items[i].date.N,
                  "accountid": data.Items[i].accountid.S
              },
              UpdateExpression: "set #uu = :x",
              ExpressionAttributeValues: {
                  ":x": {"BOOL": false}
              },
              ExpressionAttributeNames: {
                   '#uu': "isRelevant",
                   '#date': "date"
              }
          };
          
          docClient.update(params, function(err, data) {
              if (err) console.log(err);
              else {
                  console.log('worked');
              }
          });
Run Code Online (Sandbox Code Playgroud)

这段代码有什么问题?我尝试了所有可能的方法,但仍然不起作用!

tho*_*ace 5

您不需要为 dynamo 中的键使用属性名称映射。

目前,您的参数读起来就像您有一个名为“#date”的键,并且您随机声明了一个您没有使用的名为“#date”的属性。

相反尝试:

var params = {
  TableName: "test",
  Key: { "date": data.Items[i].date, "accountid": data.Items[i].accountid },
  UpdateExpression: "set #uu = :x",
  ExpressionAttributeValues: { ":x": false },
  ExpressionAttributeNames: { '#uu': "isRelevant" }
};
Run Code Online (Sandbox Code Playgroud)

另外,当使用 DynamoDB.DocumentClient 时,您应该使用 JSON 值,它将处理 dynamo 类型格式的编组信息。