如何使用 GSI 条件在 dynamodb 中保存项目?

Sma*_*oop 3 javascript node.js amazon-dynamodb dynogels

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

ConditionExpression: "#email <> :email",
ExpressionAttributeNames: {"#email": "email"},
ExpressionAttributeValues: {":email": userInfo.email}
Run Code Online (Sandbox Code Playgroud)

没有成功。

任何人都可以帮助我,

谢谢你。

Abh*_*han 5

DynamoDB 的条件表达式仅适用于它正在使用的项目,而不适用于跨项目。

换句话说,条件表达式不会针对其他项目进行评估。

例如,如果您正在创建一个新项目,则您只能在使用主键(分区 + 排序键,如果有)作为唯一约束的情况下强制执行电子邮件约束。

你有一些选择:

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

HTH