具有 begins_with ConditionalExpression 的 DynamoDB
DynamoDB with begins_with ConditionalExpression
给定以下代码,我想防止给定 table 的排序键没有 begins_with 'account_' 的排序键的重复:
db.put({
TableName: process.env.TABLE_NAME,
ConditionExpression: "NOT begins_with(SK,account_)",
Item: account
},function(err,data) {
if(err) {
callback(err,null);
} else {
callback(null,done(err,data));
}
});
Here's the table format
--------------------------------------
PK | SK | Attributes
user1@domain.com | account_123094| ...
user1@domain.com | account_239123| ... <-- ConditionalExpression should prevent
user2@domain.net | account_993422| ... <-- ConditionalExpression should allow
--------------------------------------
如上所述,如果已经存在 PK,或者更具体地说,如果 PK 和 SK 不以 'account_' 开头,我需要防止重复。无论我尝试什么,我总是得到重复的 PK 记录。
如果您的用例是只有一个帐户,您应该只选择 account
而不是 account_{someNumber}
。
对于您正在使用的结构,如果在执行 put 之前检查是否存在具有 account_* 的实体,然后执行 put 调用。但这也不足以满足给定的条件。(可以有两个人同时进行看跌期权)
给定以下代码,我想防止给定 table 的排序键没有 begins_with 'account_' 的排序键的重复:
db.put({
TableName: process.env.TABLE_NAME,
ConditionExpression: "NOT begins_with(SK,account_)",
Item: account
},function(err,data) {
if(err) {
callback(err,null);
} else {
callback(null,done(err,data));
}
});
Here's the table format
--------------------------------------
PK | SK | Attributes
user1@domain.com | account_123094| ...
user1@domain.com | account_239123| ... <-- ConditionalExpression should prevent
user2@domain.net | account_993422| ... <-- ConditionalExpression should allow
--------------------------------------
如上所述,如果已经存在 PK,或者更具体地说,如果 PK 和 SK 不以 'account_' 开头,我需要防止重复。无论我尝试什么,我总是得到重复的 PK 记录。
如果您的用例是只有一个帐户,您应该只选择 account
而不是 account_{someNumber}
。
对于您正在使用的结构,如果在执行 put 之前检查是否存在具有 account_* 的实体,然后执行 put 调用。但这也不足以满足给定的条件。(可以有两个人同时进行看跌期权)