【问题标题】:How to use updateExpression with AttributesUpdates for node.js AWS dynamodb如何将 updateExpression 与 Node.js AWS dynamodb 的 AttributesUpdates 一起使用
【发布时间】:2021-06-06 16:13:13
【问题描述】:

我正在使用 AWS dynamodb 中的 api“updateItem”来更新项目。主要功能将是添加新项目或删除一个现有项目。但是,它们都不适用于以下代码,ADD 的错误消息是“”ValidationException:Invalid UpdateExpression:运算符或函数的操作数类型不正确;运算符或函数:list_append,操作数类型:S。 这是我的代码:

const data = "newData";
async function updatedb(data) {
    return new Promise((resolve, reject) =>{
        var params = {
             Key: {
                "lists": {
                    S: data
                }
            },
            TableName: "old_lists_DB",
             UpdateExpression: "SET #L = list_append(:v,#L) ",
            ExpressionAttributeNames: {
              "#L": "lists",
              },
           ExpressionAttributeValues: {
            ":v": {
                S: data
              }
            }
        };
        dynamodb.updateItem(params, function(err,data) {
            if(err){
                reject(err);
            }else{
                resolve(data);
            }
        });
    });
}

old_lists_DB 的架构非常简单,只有一个属性:lists,值是一组字符串。 例如:

{
  {"lists" : "a"},
  {"lists" : "b"},   
  {"lists" : "c"},
}

【问题讨论】:

  • 仅供参考,无需手动创建和解决承诺。只需使用return dynamodb.updateItem(params).promise()

标签: node.js amazon-web-services amazon-dynamodb


【解决方案1】:

考虑到列表不能是分区键,您有不同的分区键,列表只是一个属性。因此,您有一个字符串 data ,您希望将其附加到列表类型的 lists 中。

有了这个,我看到了两件事,

Key:这应该包含分区键信息,在这种情况下,我假设 id 的类型为字符串。

list_append,我们应该传递一个列表本身。所以,ExpressionAttributeValues 我们需要用字符串框住一个数组。

这里是修改后的更新代码。

const data = "newData2";
const id = "1";
var params = {
  Key: {
    id: {
      S: id,
    },
  },
  TableName: "old_lists_DB",
  UpdateExpression: "SET #L = list_append(:v,#L) ",
  ExpressionAttributeNames: {
    "#L": "lists",
  },
  ExpressionAttributeValues: {
    ":v": {
      L: [{ S: data }],
    },
  },
};
dynamodb.updateItem(params, function (err, result) {
  if (err) {
    console.log("err", err);
  } else {
    console.log("result", result);
  }
});

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 2016-09-20
    • 2021-03-06
    • 2015-11-02
    • 1970-01-01
    • 2021-08-21
    • 2019-03-30
    • 2022-07-08
    • 2019-09-22
    相关资源
    最近更新 更多