2015-08-19 13 views
6

Ich habe eine Dynamodb-Tabelle mit "feed_guid" als globalen sekundären Index. Ich möchte mit einer Reihe von feed_guid in dieser Tabelle abfragen. Da "feed_guid" nicht meine Primärschlüssel sind, kann ich getBatchItem nicht verwenden. Als ich die folgende Methode ausprobierte, erhielt ich diesen Fehler "Ungültiger Operator, der in KeyConditionExpression verwandt wird: ODER".Dynamodb-Abfrage - ODER-Bedingung in 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); 

Antwort

2

Sie können die OR-Bedingung nicht verwenden. Sie sollten rangeAttributeName BETWEEN: rangeval1 AND: rangeval2 wenn möglich oder feed_guid IN (: v_guid1,: v_guid2) verwenden.

Siehe ExpressionAttributeValues und KeyConditionExpression

+1

Dies funktioniert nicht. Es zeigt "ungültiger Operator, der in KeyConditionExpression verwandt wird: IN" Fehler. –

+0

Verwenden Sie zwischen. IN wird für ExpressionAttributeValues ​​ – user1697575

+0

verwendet Lesen Sie zuerst die Definition. http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression –

2

Um zu erreichen, was Sie hier wollen, müssen Sie die Vereinigung von zwei separaten Abfragen nehmen.

Zurzeit unterstützt DynamoDB Query API nur eine Bedingung für Hash AND Range Keys nur in der KeyConditionExpression, da dies die gesuchten Elemente begrenzt und letztendlich die Kosten für eine komplexere Abfrage wie die hier beschriebene reduziert.

+3

zu verwenden. Kannst du bitte ein Beispiel geben "Wie verwende ich Union of Queries?" Alle wo in Amazon Dokumentation haben sie theoretisch beschrieben. – TheTiger