使用 Node 从 Lambda 查询 Dynamodb - 缺少键

Posted

技术标签:

【中文标题】使用 Node 从 Lambda 查询 Dynamodb - 缺少键【英文标题】:Query Dynamo from Lambda using Node - missed key 【发布时间】:2016-09-23 18:23:13 【问题描述】:

我正在使用 Lambda (nodeJS 4.3) 来查询我的 DynamoDB:

var params = 
    TableName : "shoes",
    KeyConditionExpression: "gender = :gender AND support = :support AND terrain = :terrain",
    ExpressionAttributeValues: 
        ":input": inputGender,
        ":input": inputSupport,
        ":input": inputTerrain
    

当它运行时,我收到一条错误消息,提示我缺少“查询条件缺少关键架构元素:Id”。这可能只是我的一个基本误解,但如果我想查询 DynamoDB 中的 2 个或更多字段,我是否需要将它们设为键或在所有字段上创建索引??

提前致谢。

【问题讨论】:

【参考方案1】:

查询必须包含表的分区键(或全局二级索引)。您的表的分区键是 id 并且您没有在查询中包含它。鉴于您尝试运行的查询,我认为在您的表上创建 GSI 没有意义。您将需要执行full table scan 操作而不是查询操作。

【讨论】:

这可能是我对 Dynamo(第一次)的根本误解,但我基本上有一个用户选择 3 个字段,然后想查询 Dynamo 的结果。分区键现在是一个 ID,用户永远不会明显知道这一点来查询它。这在传统 SQL 中显然非常简单,因为“SELECT * FROM Tbl WHERE row1 = X OR row2 = Y OR row3 = Z”类型的东西。关于将这种类型的思维转化为 Dynamo 的任何指导? 当我现在运行它时,我得到“条件只能是长度 1 或 2”, 不知道还能告诉你什么。你看过我的回答吗?您肯定对如何在 DynamoDB 中执行此类查找存在根本性的误解。您需要执行 scan 而不是查询。您正在尝试将 DynamoDB 视为 SQL 数据库,但事实并非如此。我建议花时间阅读文档并了解其中的差异。如果您只是想找人为您修复代码,请至少在您的问题中显示更多代码。 是的,不用担心。现在正在阅读扫描。感谢您让我走上正确的道路。

以上是关于使用 Node 从 Lambda 查询 Dynamodb - 缺少键的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 从 AWS Lambda 函数连接到 MySql 数据库,没有连接回调

错误:“无法从上下文中获取当前子/段”在 Lambda 中使用 AWS X-ray 和 node.js

用于查询 GraphQL 端点的 Lambda 函数?

无法通过node.js从lambda获取Amazon CloudWatch日志

使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

Node.js Lambda 函数从 REST 调用将“响应无效”返回给 Alexa 服务模拟器