我想使用等同于sql的(%)条件的条件来更新dynamoDB表的现有项
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中更新项目的信息。
答案 0 :(得分:0)
对于使用query
以123
开头的项目,您应该在表上创建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
。