首页 > 解决方案 > 如何基于多个(一个主要)属性 Lambda/NodeJS 从 DynamoDB 获取项目

问题描述

我在 DynamoDB 中的表结构如下所示:

uuid(主键)| 知识产权 | 用户代理

从 lambda 内部的 NodeJS 函数中,我想获取其 ip 和 useragent 与我提供的信息匹配的项目的 uuid。

Scan随着每周数以百万计的项目被添加到表中,随着时间的推移变得越来越低效率和越来越昂贵。

这是我用来尝试完成此操作的代码:

function tieDown(sIP, uA){
 const userQuery = {
       Key : {
         "ip" : "192.168.0.1",
         "userAgent" : "sample"
       },
       TableName: "mytable"
      };
  return ddb.get(userQuery, function(err, data){
   if (err) console.log(err.stack);
  }).promise();
}

执行此代码时,将引发以下错误ValidationException: The provided key element does not match the schema

所以我想我的问题是:

谢谢!

标签: node.jsamazon-dynamodbdynamodb-queries

解决方案


get如果不指定分区键和排序键(如果有),则无法使用该操作获取单个项目。在大多数情况下应避免扫描。您可能需要的是一个允许query通过ipuserAgent. 请记住,不能保证 GSI 上的记录是唯一的,因此您可能会得到多个结果。


推荐阅读