2016-02-10 21 views
7

Tôi cố gắng truy vấn dynamoDB của tôi từ một hàm Lambda. Bảng của tôi sử dụng "id" làm khóa băm. Tôi đã thử cả hai phiên bản dưới đây và nhận được thông báo lỗi tương ứng. Tôi đang làm gì sai?Truy vấn DynamoDB với Lambda (node.js): Điều kiện khóa truy vấn không được hỗ trợ

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

Không thể truy vấn. Lỗi: { "nội dung": "Điều kiện khóa truy vấn không được hỗ trợ", ...}

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

Không thể truy vấn. Lỗi: { "message": "Tình trạng của Query bỏ yếu tố then chốt schema: id", ...}

EDIT:

bây giờ tôi thêm chỉ số thứ, nhưng vẫn nhận được lỗi tương tự:

enter image description here

+0

quering cho KeyConditionExpression: "id =: id" hoạt động? và bạn có chìa khóa không? –

+0

Cảm ơn gợi ý. Tôi chỉ cố gắng sử dụng id mà không có tình trạng thành phố và nó hoạt động. Làm cách nào để thêm các điều kiện bổ sung? Tôi không sử dụng phím phạm vi – Chris

+0

tôi sẽ trả lời (để nhận +1 :)) –

Trả lời

10

nếu chìa khóa băm của bạn là 'id' sau đó bạn không thể truy vấn bằng cách:

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

hoặc bằng cách:

KeyConditionExpression: "city = :city" 

bạn chỉ có thể truy vấn dynamodb bằng khóa băm và dãy.

để truy vấn của bạn phải luôn chứa khóa băm (id). nếu bạn muốn truy vấn theo 'thành phố', bạn nên thêm 'thành phố' làm khóa phạm vi vào bảng động (hoặc chỉ số phụ địa phương)

sau đó bạn có thể truy vấn hồ sơ với 'id''city'.

update:

nếu bạn muốn truy vấn cho 'city'

KeyConditionExpression: "city = :city" 

sau đó bạn chỉ có thể thêm chỉ số thứ cấp toàn cầu vào bảng.

+0

Tôi đã thử (xem câu hỏi đã chỉnh sửa) – Chris

+0

bạn có thêm "IndexName": "city-index" vào truy vấn của mình không? –

+0

Cảm ơn bạn. nó hoạt dộng bây giờ. Cũng có cách để chỉ định nhiều chỉ mục trong thuộc tính indexName. Ví dụ. tôi muốn truy vấn thành phố, đường phố và housenumber? – Chris

Các vấn đề liên quan