2015-08-19 16 views
6

Tôi có bảng dynamodb với "feed_guid" làm chỉ mục phụ toàn cục. Tôi muốn truy vấn với một tập hợp feed_guid trong bảng đó. Vì "feed_guid" không phải là khóa chính của tôi nên tôi không thể sử dụng getBatchItem. Khi tôi đã thử các phương pháp sau đây, tôi đã nhận lỗi này "Nhà điều hành không hợp lệ được sử dụng trong KeyConditionExpression: OR".Truy vấn Dynamodb - HOẶC điều kiện trong KeyConditionExpression

$options = array(
      'TableName' => 'feed', 
       'IndexName' => 'GuidIndex', 
       'KeyConditionExpression' => 'feed_guid = :v_guid1 or feed_guid = :v_guid2', 

       'ExpressionAttributeValues' => array (
        ':v_guid1' => array('S' => '8a8106e48bdbe81bf88d611f4b2104b5'), 
        ':v_guid2' => array('S' => '19cab76242a6d85717de64fe4f8acbd4') 
       ), 
       'Select' => 'ALL_ATTRIBUTES', 
      ); 
      $response = $dynamodbClient->query($options); 

Trả lời

2

Bạn không thể sử dụng điều kiện HOẶC. Bạn nên sử dụng rangeAttributeName GIỮA: rangeval1 AND: rangeval2 nếu có thể hoặc feed_guid IN (: v_guid1,: v_guid2).

Xem ExpressionAttributeValuesKeyConditionExpression

+1

Tính năng này không hoạt động. Nó hiển thị lỗi "Toán tử không hợp lệ được sử dụng trong KeyConditionExpression: IN". –

+0

Thử sử dụng giữa. IN được sử dụng cho ExpressionAttributeValues ​​ – user1697575

+0

Chỉ cần đọc định nghĩa đầu tiên. http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression –

2

Để đạt được những gì bạn muốn ở đây, bạn sẽ cần phải thực hiện sự kết hợp của hai truy vấn riêng biệt.

Hiện tại, chỉcủa DynamoDB chỉ hỗ trợ một điều kiện trên các khóa Hash và Range trong KeyConditionExpression vì điều này giới hạn các mục bạn tìm kiếm và cuối cùng giảm chi phí cho một truy vấn phức tạp hơn như bạn đã mô tả ở đây.

+3

Bạn có thể đưa ra ví dụ "Làm cách nào để sử dụng liên minh truy vấn?" Mọi nơi trong tài liệu của Amazon họ đã mô tả về mặt lý thuyết. – TheTiger

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