使用条件表达式更新dynamoDB列

时间:2019-07-30 14:53:53

标签: amazon-web-services lambda aws-lambda amazon-dynamodb dynamodb-queries

我想使用等同于sql的(%)条件的条件来更新dynamoDB表的现有项

opIdUserId状态

  • 123-U1进行中
  • 345-U2进行中
  • 保留123-U3
我的动态引擎中的

opIdUserId是主分区键。我想将opIdUserId字段值从123开始或包含123的状态更新为COMP。

这是我目前正在尝试的方法,但是经过研究后发现我无法使用KeyConditionExpression进行更新。

const AWS = require('aws-sdk'); 
 const docClient = new AWS.DynamoDB.DocumentClient({region: 'eu-west-1'}); 
 var table = "tablename";

exports.handler = function(event, context, callback){
    var params = {
    TableName: table,

    KeyConditionExpression: "begins_with(opIdUserId, :i)",
    UpdateExpression: "set operationStatus = :o",
    ExpressionAttributeValues:{
        ":o":"COMP",
        ":i":"123-"
    },
    ReturnValues:"UPDATED_NEW"
};
docClient.update(params, function(err, data) {
    if (err) {

         callback(err, null);
    } else {
         callback(null,data); 

    }
});
 } 

请提出如何根据特定条件在dynamoDB中更新项目的信息。

1 个答案:

答案 0 :(得分:0)

对于使用query123开头的项目,您应该在表上创建KeyConditionExpression的{​​{3}}。

var params = {
  TableName: table,
  KeyConditionExpression: "id = :id AND begins_with(opIdUserId, :opIdUserId)",
  UpdateExpression: "set operationStatus = :operationStatus",
  ExpressionAttributeValues:{
    ":opIdUserId":"123-",
    ":id": "something"
  }
};

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

documentClient.query(params, function(err, data) {
   if (err) console.log(err);
   else console.log(data);
});

请记住,您不能在BEGINS_WITH上仅使用partition key上的sort key来运行查询。

然后,您可以对表使用update来对每个元素使用partition and sort key方法,从而更新operationStatus

如果您向我提供有关您的DynamoDB表的信息,那么我可以帮助您创建GSI