2016-02-10 54 views
7

我尝试从Lambda函数查询我的dynamoDB。我的表使用“id”作为散列键。我尝试了以下两个版本并收到相应的错误消息。我究竟做错了什么?使用Lambda(node.js)进行DynamoDB查询:不支持查询键条件

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

无法查询。错误:{ “消息”: “查询关键条件不支持”,...}

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

无法查询。错误:{ “消息”: “查询条件错过了关键的架构元素:ID”,...}

编辑:

我现在又增加了二级指标,但仍然得到了同样的错误:

enter image description here

+0

quound for KeyConditionExpression:“id =:id”works?你有范围键吗? –

+0

感谢您的提示。我只尝试使用没有城市条件的ID,它的工作原理。我如何添加附加条件?我不使用范围键 – Chris

+0

我会回答它(获得+1 :)) –

回答

10

如果你的散列关键字是 '身份证',那么你不能查询方式:

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

或:

KeyConditionExpression: "city = :city" 

您只能通过散列和范围键来查询dynamodb。

所以你的查询应该总是包含散列键(id)。如果你想通过'城市'进行查询,你应该添加'city'作为范围键到dynamodb表(或本地二级索引)

然后你可以查询记录'id''city'

更新:,如果你想查询'city'

KeyConditionExpression: "city = :city" 

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

+0

我试过了(请参阅编辑的问题) – Chris

+0

是否在您的查询中添加了“IndexName”:“city-index”? –

+0

谢谢。它现在有效。是否还有一种方法可以在indexName属性中指定多个索引。例如。它我想查询城市,街道和housenumber? – Chris