如何将值附加到AWS DynamodB

时间:2018-04-29 00:12:25

标签: node.js amazon-dynamodb

我正在尝试将消息附加到AWS DynamoDB中的空列表中。

这是我运行函数时得到的错误

  

无效的UpdateExpression:运算符的操作数不正确   或功能;运算符或函数:list_append,操作数:1

DynamodB中的数据结构

enter image description here

以下是代码:

var caseId       = "1734009";
var chatMessage = { "2018-04-20T15:02:48Z":
                    {
                      "userId": "wQnUJrklzwWBDOsx83XVETSS7us2",
                      "message": "How are you"
                    }
                  }

var params = {
  TableName  : 'CHATS',
  Key: {
    "CASE_ID" : caseId
  },
  UpdateExpression : "SET CHAT_MESSAGES = list_append(:i)",
  ExpressionAttributeValues : {
      ':i': [chatMessage],
  },
  ReturnValues:'UPDATED_NEW' // OTHER OPTIONS: NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW
};


documentClient.update(params, function(err, data) {
  if(err) {

    var message  = "Chat message could not be saved, error:" + JSON.stringify(err, null, 2);
    res.json({"status": "failure", "statusCode" : 400, "message": message});

  } else {
    next();
  }
});

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

通过使用以下参数并参考Jason Livesay提供的AWS Docs,我能够将项目添加到空列表中。

var params = {
    TableName  : 'CHATS',
    Key: {
      "CASE_ID" : caseId
    },

    UpdateExpression : "SET #ri = list_append(#ri, :vals)",
    ExpressionAttributeNames: {
      "#ri": "CHAT_MESSAGES"
    },
    ExpressionAttributeValues : {
        ':vals': [chatMessage]
    },
    ReturnValues:'UPDATED_NEW' // OTHER OPTIONS: NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW
  };

答案 2 :(得分:0)

看下面的例子。属性“ graph”创建为空列表,以后可以使用list_append()进行更新。请注意,我正在使用Boto3(python)更新我的dynamodb表。

dynamoTable = dynamodb.Table('abc')
            dynamoTable.put_item(
                Item={
                    ''<primary_key>'': <primary_key_value>,
                    'First Name': 'first_name',
                    'Last Name': 'last_name',
                    'password_hash': 'password_hash',
                    'salt': 'salt',
                    'graph': [],
                }

查看以下代码,将元素/消息添加到列表中:

dynamoTable = dynamodb.Table('abc')
        dynamoTable.update_item(
        Key={
        '<primary_key>': '<primary_key_value>',
        },
        UpdateExpression="set #Graph = list_append(#Graph, :name)",
        ExpressionAttributeNames={
            '#Graph': 'graph',

     },
        ExpressionAttributeValues = {
                ':name': [# {'myObject':
                    {
                       "userId": "wQnUJrklzwWBDOsx83XVETSS7us2",
                       "message": "How are you"
                    }
                #}
            ],


   }

上面的代码将在'graph'中将{em> map 附加到"userId" and "message"