javascript 如何保存项目在dynamodb与GSI条件?

wxclj1h5  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(114)

我有一个dynamodb表,它有一个带范围键(email,hashedPassword)的全局二级索引。我想保存一个项目,如果电子邮件没有重复,我使用了attribute_not_exists,但它不工作,我还使用:

ConditionExpression: "#email <> :email",
ExpressionAttributeNames: {"#email": "email"},
ExpressionAttributeValues: {":email": userInfo.email}

没有成功。
有人能帮帮我吗,
谢谢大家。

qco9c6ql

qco9c6ql1#

DynamoDB的条件表达式仅适用于它正在处理的项,而不是跨项。
换句话说,条件表达式不会针对其他项进行计算。
例如,如果要创建新项目,则只有在使用主键(分区+排序键,如果有的话)作为唯一约束时,才能强制电子邮件约束。
您可以选择:

  • 在插入之前执行读取。这并不能保证电子邮件的唯一性,但应该会捕获很多重复的内容。
  • 使用电子邮件作为主键。
  • 在插入之后执行一致读取,这将回滚创建

高温加热

gab6jxml

gab6jxml2#

如果有人有同样的问题,这里是我的方法:
1.在插入之前对gsi执行读取
1.使用ClientRequestToken执行TransactWriteItems(使用gsi的数据),防止短时间内多次请求
参见此参考。

相关问题