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

如何将updateExpression与节点的AttributesUpdates一起使用。js AWS发电机

督坚白
2023-03-14

我正在使用AWS dynamodb中的api“updateItem”来更新项目。主要功能是添加新项目或删除一个现有项目。但是,它们都不适用于以下代码,ADD的错误消息为“”ValidationException:无效的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);
            }
        });
    });
}

旧的_lists _DB的模式非常简单,只有一个属性:list,值是一组字符串。例如:

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

共有1个答案

薛淮晨
2023-03-14

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

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

键:这应该包含分区键信息,在本例中,我假设id为string类型。

list\u append,我们应该传递一个列表本身。因此,expressionattributevalue我们需要用一个字符串构建一个数组

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

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);
  }
});

 类似资料:
  • 我是一个新手程序员。我一直在制作一个非常小的网站。我没有遇到什么错误。我找到了一些解决办法。但我还没有得到答案。 如果你不介意,请给我你的触摸。T^T 我连接了节点。js with Mysql'GET正在运行,没有任何问题。但是“POST”部分无法获取我在网页上键入的一些数据。 我想知道的是,为什么“POST”无法获取数据。 错误消息 TypeError:无法读取应用程序中未定义的属性“name”

  • 在控制台中,当运行时,命令现在被本机启用(node版本 但是,当我添加打字稿层时,我总是得到。 我如何解决这个问题? 背景思想:本机使用获取并摆脱和依赖项 < code>tsconfig.json和一般设置:https://github . com/NEX ys-system/server-boilerplate/blob/master/ts config . JSON 另见: Fetch API

  • 问题内容: 有人在Grunt上使用了节点检查器进行应用程序调试吗?如果不是,您能推荐基于Grunt的应用程序的调试工具吗? 我正在为服务器端应用程序使用nodejs,并且我有Grunt来使用分离的任务(这是因为用户可以单独执行任务)。 问题答案: 要在调试中运行grunt,您需要将grunt脚本显式传递给节点: 并在任务中添加一行。然后将使用调试工具打开浏览器。 编辑2014年2月28日 添加了命

  • 我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。

  • 我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理

  • 我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。