Dynamodb查询 - KeyConditionExpression中的OR条件

Aru*_* SS 12 amazon-web-services amazon-dynamodb

我有一个dynamodb表,其中"feed_guid"作为全局二级索引.我想查询该表中的一组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);
Run Code Online (Sandbox Code Playgroud)

use*_*575 10

你不能使用OR条件。你应该使用

rangeAttributeName BETWEEN :rangeval1 AND :rangeval2
Run Code Online (Sandbox Code Playgroud)

如果可能或

feed_guid IN (:v_guid1, :v_guid2)
Run Code Online (Sandbox Code Playgroud)

请参阅ExpressionAttributeValuesKeyConditionExpression

  • 这是行不通的。它显示“KeyConditionExpression 中使用的运算符无效:IN”错误。 (15认同)
  • 据我所知,使用“KeyConditionExpression”时不支持“OR”或“IN”——无论如何,使用查询 API 时不支持。 (2认同)

Ray*_*Lin 7

为了在这里实现您想要的,您需要合并两个单独的查询。

目前,DynamoDB 的查询 API仅支持在KeyConditionExpression 中的哈希和范围键上有一个条件,因为这限制了您搜索的项目并最终降低了更复杂查询的成本,例如您在此处描述的内容。

  • 你能举一个例子“如何使用查询联合?” 他们在理论上描述了亚马逊文档中的每一个地方。 (12认同)
  • 他们写了“两个 **单独** 查询的联合”(我的重点),即您应该进行两个单独的查询并合并结果 (2认同)