web-dev-qa-db-fra.com

Requête Dynamodb - OR condition dans KeyConditionExpression

J'ai une table DynamoDB avec feed_guid comme indice secondaire global. Je souhaite interroger avec un ensemble de feed_guid dans ce tableau. Puisque feed_guid n'est pas ma clé primaire, je ne peux pas utiliser getBatchItem. Lorsque j'ai essayé la méthode suivante, j'ai eu cette erreur:

Opérateur non valide utilisé dans KeyConditionExpression: OU

    $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);
13
Arun SS

Afin de réaliser ce que vous voulez ici, vous devrez prendre l'union de deux requêtes distinctes.

Actuellement, DynamoDB Query API ne prend en charge qu'une seule condition sur les clés de hachage et de plage dans uniquement KeyConditionExpression, car cela limite les éléments que vous recherchez et, en fin de compte, réduit le coût d'une requête plus complexe comme celle que vous avez décrite ici .

5
Raymond Lin

Vous ne pouvez pas utiliser la condition OR. Vous devez utiliser rangeAttributeName ENTRE: rangeval1 ET: rangeval2 si possible ou feed_guid IN (: v_guid1,: v_guid2).

Voir ExpressionAttributeValues et KeyConditionExpression

4
user1697575