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

abd*_*yaz 3 node.js amazon-dynamodb dynamodb-queries

我有7列,

id, firstname, lastname, email, phone, createAt, updatedAt
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 Nodejs 中编写一个 api 来获取项目phone

id是主键。

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

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

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

Nad*_*'El 6

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

  1. 较慢的方法是使用 aScan和 aFilterExpression来查找匹配项。这将花费时间(并且成本!)在每次查询时读取整个数据库。仅当这些查询非常罕见时才有意义。
  2. 如果这些查询phone不是非常罕见,最好提前做好准备:添加一个以 为分区键的 GSI ,以允许使用和来phone按电话值查找项目。这些查询将快速且廉价:您只需为实际检索到的项目付费。这种方法的缺点是写入成本增加:每次写入的成本都会增加一倍(DynamoDB 同时写入基表和索引),并且存储成本也会增加。但是,除非您的工作负载主要是写入(项目非常频繁地更新并且很少读取),否则使用 GSI 的选项 2 仍然比选项 1 - 全表更好。QueryIndexNameKeyConditionExpressionScan

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