【发布时间】:2021-11-13 18:45:31
【问题描述】:
我正在使用 DynamoDB,我只想在主键不存在时创建主键和属性。
如果主键存在,我返回主键和属性。
到目前为止,如果主键不存在,我已经对其进行了更新,但我遇到的问题是,即使主键 alexaDeviceId 已经存在,它仍在更新属性 connectionString :
const str = randomize('Aa0', 6);
const params = {
TableName: "alexa-connections-table",
Key: {
"alexaDeviceId": {
S: process.env.TEST_ALEXA_DEVICE_ID
}
},
ExpressionAttributeNames: {
"#CS": "connectionString"
},
ExpressionAttributeValues: {
":connection": {
S: str
}
},
ReturnValues: "ALL_NEW",
UpdateExpression: "SET #CS = :connection"
};
try {
var result = await dynamodb.updateItem(params).promise();
console.log('Results: ' + JSON.stringify(result));
return res.status(200).send(JSON.stringify(result));
} catch (err) {
console.log(err);
return res.status(500).send({ reason: err });
}
例如,当我第一次使用空的 dynamoDB 表运行 lambda 函数时:
它应该添加主键 alexaDeviceId 和 6 位属性(按预期工作)
Column alexaDeviceId: AHJYGV...
Column connectionString: 5Dz2SD
当我再次运行程序时
它不应该做任何更新并返回
{"Attributes":{"connectionString":{"S":"5Dz2SD"},"alexaDeviceId":{"S":"AHJYGV..."}}
而是更新connectionString 并返回一个新值(意外结果)
{"Attributes":{"connectionString":{"S":"DxBVmH"},"alexaDeviceId":{"S":"AHJYGV..."}}
如果alexaDeviceId 主键已存在,如何添加不更新connectionString 的条件?
编辑:_____________________________________________________
我尝试使用putItem,但我无法找出正确的语法:
const str = randomize('Aa0', 6);
const params = {
TableName: "alexa-connections-table",
Item: {
"alexaDeviceId": {
S: process.env.TEST_ALEXA_DEVICE_ID
},
"connectionString": {
S: str
}
},
ExpressionAttributeValues: {
':ADI': {'S': process.env.TEST_ALEXA_DEVICE_ID}
},
ConditionExpression: 'if_not_exists(alexaDeviceId, :ADI)'
};
try {
var result = await dynamodb.putItem(params).promise();
console.log('Results: ' + JSON.stringify(result));
return res.status(200).send(JSON.stringify(result));
} catch (err) {
console.log(err);
return res.status(500).send({ reason: err });
}
给我错误:
ValidationException: Invalid ConditionExpression: The function is not allowed in a condition expression; function: if_not_exists
【问题讨论】:
标签: node.js amazon-web-services aws-lambda amazon-dynamodb dynamodb-queries