如何在nodejs中的DynamoDB中按属性获取项目

How Can I get Item by Attribute in DynamoDB in nodejs

我有 7 列,

id, firstname, lastname, email, phone, createAt, updatedAt

我正在尝试在 Nodejs 中编写 api 以通过 phone 获取项目。

id是主键。

我正在尝试通过 phone 或电子邮件获取数据。我还没有创建 sortkey 或 GS​​I。

我最终得到了在 dynamodb 中使用 scan 过滤器并获取所有记录的建议。

还有其他方法可以实现吗?

您的问题已经包含两个很好的答案:

  1. 较慢的方法是使用 ScanFilterExpression 来查找匹配项。这将花费时间(还有成本!)在每次查询时读取整个数据库。只有在这些查询非常少见的情况下才有意义。
  2. 如果phone的这些查询不是super-rare,最好提前准备:添加一个以phone为分区键的GSI,以便查找使用 QueryIndexNameKeyConditionExpression 的 phone 值的项目。这些查询将快速且便宜:您只需为实际检索到的项目付费。这种方法的缺点是增加了写入成本:成本 每次写入都翻倍(DynamoDB 写入基 table 和 索引),并且存储成本也会增加。但除非 您的工作量是 write-mostly(项目更新非常频繁并且 很少阅读),选项 2,使用 GSI,仍然比 选项 1 - full-table Scan.

您最后的另一个选择是重新考虑您的数据模型。例如,如果您总是按 phone 而从不按 id 查找项目,则可以将 phone 设为数据的分区键,将 id 设为排序键(以允许具有相同 phone 的多个项目)。但我不知道这是否与您的用例相关。如果您有时需要通过 id 查找项目,有时需要通过 phone 查找项目,GSI 可能正是您所需要的。