недавно начал использовать DynamoDB
, и у меня возникают проблемы с выборкой данных по нескольким ключам.
Я пытаюсь получить несколько элементов из таблицы.
Моя схема таблицы определяется следующим образом :
{
"AttributeDefinitions": [
{
"AttributeName": "id",
"AttributeType": "S"
},
{
"AttributeName": "date",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "id",
"KeyType": "HASH"
},
{
"AttributeName": "date",
"KeyType": "RANGE"
}
],
...
}
У меня есть список фильтров для идентификаторов и диапазон дат для каждого идентификатора:
[
{ "id": "abc", "start_date": "24/03/2020", "end_date": "26/03/2020" },
{ "id": "def", "start_date": "10/04/2020", "end_date": "20/04/2020" },
{ "id": "ghi", "start_date": "11/04/2020", "end_date": "11/04/2020" }
]
Мне нужно получить все элементы, которые соответствуют списку фильтров.
Проблема в том, что я не могу использовать Query
, поскольку KeyConditionExpression
принимает только один ключ раздела (и мне нужно сопоставить его со всем списком фильтров)
Условие должно выполнять равенство проверить значение ключа одного раздела.
Я не могу использовать BatchGetItem
, так как для этого требуется точный ключ (и мне нужен диапазон дат для моего ключа сортировки Key('date').between(start_date, end_date)
)
Keys - Массив значений атрибутов первичного ключа, которые определяют указанные c элементы в таблице. Для каждого первичного ключа вы должны предоставить все ключевые атрибуты. Например, с простым первичным ключом вам нужно только указать значение ключа раздела. Для составного ключа необходимо указать как значение ключа разделения, так и значение ключа сортировки.
Я немного потерян ... Есть ли способ получить несколько ключей с помощью запроса диапазона ( одним запросом - не несколькими запросами от al oop)?
Вы бы предложили какие-либо изменения в таблице?