#amazon-dynamodb
#amazon-dynamodb
Вопрос:
Я могу получить один элемент из своей таблицы, используя ExpressionAttribute и определенный идентификатор. Как я могу получить список элементов за последние 30 дней?
Эквивалентный SQL statment будет выглядеть следующим образом:
select * from tablename datetime >= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)
Ниже приведен код, который я пробовал:
$sevenDaysAgo = date('Y-m-d H:i:s', strtotime('30 days'));
echo $response = $dynamodb->query([ 'TableName' => 'notifications',
'KeyConditionExpression' => 'id = :id and date_time >= :datess',
'ExpressionAttributeValues' => [
':id' => ['S' => '350'],
':datess' => ['S' => $sevenDaysAgo] ],
'ProjectionExpression' => 'id',
'ConsistentRead' => true ]);
Ответ №1:
Если в вашей таблице нет ключа раздела с именем id
и ключа сортировки (также называемого диапазоном) с именем date_time
, ваш запрос не будет работать так, как вы его написали.
С DynanoDB, в отличие от реляционной базы данных, вы можете запрашивать только ключ раздела и ключ сортировки.
Если вам нужно выполнить запрос на основе атрибута, который не является ключом сортировки или раздела, ваши варианты:
-
сканирование с фильтром — это хорошо работает, когда вы ожидаете, что запрос будет извлекать большинство записей в таблице
-
создайте вторичный индекс, который включает в себя интересующие вас атрибуты для запроса, и выполняйте запрос с использованием индекса