DynamoDB 表包含 5 行,其中 parkingSpot 是主键。
const params = {
TableName: "gofore-park",
Item: {
parkingSpot: {
N: parkingSpot,
},
VRN: {
S: vrn,
},
startTime: {
S: startTime,
},
},
ExpressionAttributeValues: {
":empty": {
S: "",
},
},
ConditionExpression: "VRN = :empty",
};
dynamodb.putItem(params, function (err, data) {
if (err) {
// an error occurred
console.log(err);
callback("parking spot is busy");
} else {
// successful response
callback(null, { message: "car parking info is logged" });
}
});
我定义了一个 ExpressionAttributeValues,以便在 VRN 字段不为空时尝试 putItem 时引发错误。
首先,有没有更好的方法来定义这个条件?
其次,我正在使用 putItem 测试两个场景:
当 VRN 字段不为空时更新现有行。
正如预期的那样,我得到“ConditionalCheckFailedException”。
我不明白为什么在尝试使用 parkingSpot>5 创建新条目时会遇到相同的错误。
我已启用 CloudWatch 来跟踪日志。
条件基于服务器端项目,而不是客户端。我希望您对客户端属性进行检查,然后使用代码中的条件(而不是 DynamoDB 请求中的条件)进行检查。
您的条件在这两种情况下都失败是有道理的,因为服务器端项目在这两种情况下都不等于空字符串。