如何在Node.js中的DynamoDB中按属性获取项目

问题描述

我有7列,

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

我试图在Node.js中编写一个api,以通过phone获取项目。

id是主键。

我正在尝试通过电话或电子邮件获取数据。我尚未创建排序键或GSI。

我最终得到建议,将scan与dynamodb中的过滤器一起使用并获取所有记录。

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

解决方法

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

  1. 最慢的方法是将ScanFilterExpression一起使用以查找匹配的项目。在每个查询上读取整个数据库都需要花费时间(也要花钱!)。仅在这些查询很少出现时才有意义。
  2. 如果phone进行的这些查询不是非常稀有,最好事先准备:添加一个以phone作为其分区键的GSI,以允许按电话值查找项目与QueryIndexName一起使用KeyConditionExpression。这些查询既快速又便宜:您只需为实际检索到的商品付费。这种方法的缺点是增加了写入成本:成本 每次写入的次数增加一倍(DynamoDB写入基表和 索引),存储成本也会增加。但是除非 您的工作量主要是写操作(项目经常更新,并且 很少阅读),使用GSI的选项2仍然比 选项1-全表Scan

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...