2016-02-10 78 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