【问题标题】:Dynamodb query - OR condition in KeyConditionExpressionDynamodb 查询 - KeyConditionExpression 中的 OR 条件
【发布时间】:2015-11-13 00:30:02
【问题描述】:

我有一个以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);

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb


    【解决方案1】:

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

    rangeAttributeName BETWEEN :rangeval1 AND :rangeval2
    

    如果可能的话或

    feed_guid IN (:v_guid1, :v_guid2)
    

    ExpressionAttributeValuesKeyConditionExpression

    【讨论】:

    • 这不起作用。它显示“KeyConditionExpression 中使用的运算符无效:IN”错误。
    • 尝试使用 between。 IN 用于 ExpressionAttributeValues
    • 是的。文档只说 AND 支持范围。没有 OR。您也可以尝试使用 begin_with
    • 据我所知,在使用 KeyConditionExpression 时不支持 ORIN -- 反正在使用查询 API 时也不支持。
    【解决方案2】:

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

    目前,DynamoDB 的 Query API 仅支持在 KeyConditionExpression 中对 Hash AND Range Keys 设置一个条件,因为这会限制您搜索的项目并最终降低您在此处描述的更复杂查询的成本。

    【讨论】:

    • 你能举个例子“如何使用查询联合吗?”他们在理论上描述了亚马逊文档中的每一个地方。
    • 他们写了“两个单独查询的联合”(我的重点),即您应该进行两个单独的查询并合并结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多