【问题标题】:Query Dynamo from Lambda using Node - missed key使用 Node 从 Lambda 查询 Dynamodb - 缺少键
【发布时间】: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 个或更多字段,我是否需要将它们设为键或在所有字段上创建索引??

提前致谢。

【问题讨论】:

    标签: node.js amazon-dynamodb aws-lambda


    【解决方案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 数据库,但事实并非如此。我建议花时间阅读文档并了解其中的差异。如果您只是想找人为您修复代码,请至少在您的问题中显示更多代码。
    • 是的,不用担心。现在正在阅读扫描。感谢您让我走上正确的道路。
    猜你喜欢
    • 1970-01-01
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多