Ответ 1
Вы не можете использовать ИЛИ условие. Вы должны использовать rangeAttributeName BETWEEN: rangeval1 AND: rangeval2, если это возможно, или feed_guid IN (: v_guid1,: v_guid2).
У меня есть таблица DynamoDB с feed_guid
в качестве глобального вторичного индекса. Я хочу сделать запрос с набором feed_guid
в этой таблице. Поскольку feed_guid
не является моими первичными ключами, я не могу использовать getBatchItem
. Когда я попробовал следующий метод, я получил эту ошибку:
Недопустимый оператор, используемый в выражении 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);
Вы не можете использовать ИЛИ условие. Вы должны использовать rangeAttributeName BETWEEN: rangeval1 AND: rangeval2, если это возможно, или feed_guid IN (: v_guid1,: v_guid2).
Чтобы достичь того, чего вы хотите здесь, вам нужно принять объединение двух отдельных запросов.
В настоящее время DynamoDB API запросов поддерживает только одно условие для ключей Хэш и Range только в KeyConditionExpression, поскольку это ограничивает элементы, которые вы ищете, и в конечном итоге уменьшает стоимость, скажем, более сложного запроса, как то, что вы описали здесь.