【问题标题】:DynamoDB query with Lambda (node.js): Query key condition not supported使用 Lambda (node.js) 进行 DynamoDB 查询:不支持查询键条件
【发布时间】:2016-05-20 23:33:48
【问题描述】:

我尝试从 Lambda 函数查询我的 dynamoDB。我的表使用“id”作为哈希键。我尝试了以下两个版本并收到了相应的错误消息。我做错了什么?

  var params = {
        TableName : "addresses",
        KeyConditionExpression: "id = :id AND city = :city",
        ExpressionAttributeValues: {
            ":id": "Austria",
            ":city": "Salzburg"
        }
    };

无法查询。错误: { "message": "不支持查询键条件",...}

var params = {
    TableName : "addresses",
    KeyConditionExpression: "city = :city",
    ExpressionAttributeValues: {
        ":city": "Salzburg"
    }
};

无法查询。错误: { "message": "查询条件错过关键架构元素:id",...}

编辑:

我现在添加了二级索引,但仍然出现相同的错误:

【问题讨论】:

  • 查询 KeyConditionExpression: "id = :id" 有效吗?你有范围键吗?
  • 感谢您的提示。我只是尝试只使用没有城市条件的 id 并且它有效。如何添加附加条件?我不使用范围键
  • 我会回答(获得+1 :))

标签: amazon-dynamodb aws-lambda


【解决方案1】:

如果您的哈希键是“id”,那么您不能通过以下方式查询:

KeyConditionExpression: "id = :id AND city = :city"

或通过:

KeyConditionExpression: "city = :city"

您只能通过哈希和范围键查询dynamodb。

所以您的查询应该始终包含哈希键 (id)。如果您还想按“城市”查询,则应将“城市”作为范围键添加到 dynamodb 表(或本地二级索引)

然后您可以使用'id''city' 查询记录。

更新:

如果要查询'city'

KeyConditionExpression: "city = :city"

那么你可以在表中添加全局二级索引。

【讨论】:

  • 您是否在查询中添加了 "IndexName": "city-index"?
  • 谢谢。现在可以了。还有一种方法可以在 indexName 属性中指定多个索引。例如。我想查询城市、街道和门牌号码吗?
  • 哇。真可惜。这使得 dynamodb 对于我的目的实际上毫无用处。 (例如查询街道地址)
  • 是的.. 并不总是推荐使用 dynamodb。但是您可以尝试考虑构建复合键。如果您的街道有代码,那么您的“城市”键可以是“NY-2”。那么就可以查询city+street
  • @EyalCh 假设我们的数据库中有城市和州。 id 是哈希键,city 是范围键。如何使用城市和州的条件进行查询?
猜你喜欢
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多