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

将不存在的元素添加到DynamoDB中的数组中

毕浩渺
2023-03-14

我试图更新项目属性,这是一个字符串列表。仅当属性不存在时,才能更新(追加)该属性。有点list_append

var参数={...

UpdateExpression: 

'SET friends=list\u append(如果不存在(friends,:empty\u list),:new\u friends)',

ExpressionAttributeValues:{
    ":new_friend": [{"S":"Bobo"}],
    ":empty_list" :[]
 } };

这不管用,有办法吗?因此,如果Bobo仍然不在我的“朋友”列表中,它将附加它

共有2个答案

仲孙翔飞
2023-03-14

当我试图在列表中添加一个字符串时,我找到了这个答案,但前提是该字符串不存在。

经过一些研究,我意识到我应该使用字符串集而不是列表。

下面是我用来将项添加到字符串集的参数。(它自动处理防止欺骗)

 const AWS = require('aws-sdk');
 const docClient = new AWS.DynamoDB.DocumentClient();
 const item = 'unique string to add to set';
 const params = {
          TableName: 'myTable',
          Key: {
            myId,
          },
          UpdateExpression:
            'ADD myList :myItem',
          ExpressionAttributeValues: {
            ':myItem': docClient.createSet([item]),
          },
          ReturnValues: 'UPDATED_NEW',
  };
  docClient.update(params);

注意:createSet将创建不存在的集合,并添加已存在的项。

终育
2023-03-14

您可以使用“不包含”和“列表附加”来满足您的需求。

下面的代码将插入新好友列表,如果该好友尚未出现在列表中。

如果好友已经在列表中,它将抛出“条件请求失败”。

条件失败时的错误消息:-

Unable to update item. Error JSON: {
  "message": "The conditional request failed",
  "code": "ConditionalCheckFailedException",
  "time": "2016-06-22T08:18:36.483Z",
  "requestId": "86805965-240b-43e0-8fdc-77fb9ae1b15c",
  "statusCode": 400,
  "retryable": false,
  "retryDelay": 0
}

下面的代码工作正常。已经测试成功。

代码示例

var AWS = require("aws-sdk");

AWS.config.update({
    region : "us-west-2",
    endpoint : "http://localhost:8000"
});

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

var table = "users";

var userid = 1;
var friendId = ["f4"];
var friendIdStr = "f4";


//Add the new DOCUMENT TYPE attribute to the table
var params = {
    TableName : table,
    Key: {
        "id" : userid 
    },
    "UpdateExpression": "set friends = list_append (friends, :friendId)",
    "ConditionExpression": "not contains (friends, :friendIdStr)",
    "ExpressionAttributeValues": { 
        ":friendId": friendId,
        ":friendIdStr" : friendIdStr
    },
    "ReturnValues" : "UPDATED_NEW"
};

console.log("Updated an item...");
docClient.update(params, function(err, data) {
    if (err) {
        console.error("Unable to update item. Error JSON:", JSON.stringify(err,
                null, 2));
    } else {
        console.log("Updated item:", JSON.stringify(data, null, 2));
    }
});
 类似资料:
  • 问题内容: 想要向现有数组添加或追加元素 现在我想用我发送的新值动态更新系列。 就像我发送3个更新系列 再次,如果我发送4更新系列作为 再次,如果我发送1个更新系列,依此类推 怎么做???? 我在其他函数中每5分钟生成一个整数,并希望发送以更新数组。 问题答案: 数组的长度在Java中是不可变的。这意味着一旦创建数组便无法更改其大小。如果使用2个元素初始化它,则其长度为2。但是,您可以使用其他集合

  • 问题内容: 我有一个numpy数组,其中包含: 我想创建一个包含以下内容的数组: 也就是说,我想将第一个元素添加到数组的末尾。 我尝试了明显的方法: 但我说错了 我不明白这一点-数组都是一维数组。 问题答案: 创建一个新数组,该数组可以是带有附加元素的旧数组。 我认为使用适当的方法添加元素更为正常:

  • 问题内容: 在可选数组的末尾附加元素的正确方法是什么?假设我有一个可选数组myArray,我想在末尾附加“ 99”。Append()在nil数组上不起作用,因此我可以找到的唯一解决方案是以下方法,但是它看起来并不十分优雅: 问题答案: 您可以使用的事实,通过可选的链接调用的方法总是返回一个可选的值,即如果它是 不可能的 调用方法: 如果则则追加新元素并返回,以便不执行if块。 如果则不执行任何操作

  • 问题内容: 如果我在PHP中定义了一个数组,例如(我没有定义其大小): 我是否可以使用以下内容简单地添加元素? PHP中的数组没有add方法,例如? 问题答案: 您所描述的两种方法都可以。 是相同的:

  • 本文向大家介绍在PHP中,如何将对象元素添加到数组?,包括了在PHP中,如何将对象元素添加到数组?的使用技巧和注意事项,需要的朋友参考一下 代码如下- 示例 输出结果 这将产生以下输出- 创建对象,然后将其推到数组的末尾(以前存在)。 另类

  • 问题内容: 我正在尝试将元素添加到python中的json文件中,但我无法做到这一点。 这是我直到现在尝试的内容(删除了一些变化): 但是,我得到的是: 很好,因为我还需要添加一个新行而不是一个元素,但是我想得到这样的东西: 我应该如何添加新元素? 问题答案: 你可以这样做。