web-dev-qa-db-ja.com

Dynamodbクエリ-OR KeyConditionExpressionの条件

グローバルセカンダリインデックスとしてfeed_guidを含むDynamoDBテーブルがあります。そのテーブルでfeed_guidのセットを使用してクエリを実行します。 feed_guidは私の主キーではないため、getBatchItemを使用できません。次の方法を試したところ、このエラーが発生しました。

KeyConditionExpressionで使用されている無効な演算子:OR

    $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

ここで必要なことを実現するには、2つの別々のクエリを結合する必要があります。

現在、DynamoDBの Query API は、検索するアイテムを制限し、最終的にはここで説明したようなより複雑なクエリのコストを削減するため、KeyConditionExpressionでのみハッシュAND範囲キーの条件を1つだけサポートします。

5
Raymond Lin

OR条件は使用できません。可能であればrangeAttributeName BETWEEN:rangeval1 AND:rangeval2を使用するか、feed_guid IN(:v_guid1、:v_guid2)を使用してください。

ExpressionAttributeValues および KeyConditionExpression を参照してください

4
user1697575