2015-08-19 12 views
6

Mam tabelę dynamodb z "feed_guid" jako globalnym indeksem wtórnym. Chcę zapytać z zestawem feed_guid w tej tabeli. Ponieważ "feed_guid" nie jest moimi kluczami głównymi, więc nie mogę używać getBatchItem. Kiedy próbowałem następującej metody, mam ten błąd "Niepoprawny operator używany w KeyConditionExpression: LUB".Zapytanie Dynamodb - Stan OR w 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); 

Odpowiedz

2

Nie można użyć warunku LUB. Powinieneś użyć rangeAttributeName BETWEEN: rangeval1 AND: rangeval2 jeśli to możliwe lub feed_guid IN (: v_guid1,: v_guid2).

Zobacz ExpressionAttributeValues i KeyConditionExpression

+1

To nie działa. Pokazuje błąd "Niepoprawny operator użyty w KeyConditionExpression: IN". –

+0

Spróbuj użyć między. IN jest używane dla ExpressionAttributeValues ​​ – user1697575

+0

Najpierw przeczytaj definicję. http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression –

2

W celu osiągnięcia tego, co chcesz tutaj, trzeba podjąć Unia dwóch oddzielnych zapytań.

Obecnie usługa DynamoDB w wersji Query API obsługuje tylko jeden warunek na kluczach Hash AND Range tylko w KeyConditionExpression, ponieważ ogranicza to liczbę wyszukiwanych produktów i ostatecznie obniża koszt, np. Bardziej złożone zapytanie, takie jak opisane tutaj.

+3

Czy możesz podać przykład "Jak używać unii zapytań?" Wszystko, co w dokumentacji Amazon opisali teoretycznie. – TheTiger