DynamoDB запрос с использованием ИЛИ и начинается с - PullRequest
1 голос
/ 16 января 2020

Прежде всего, я знаю, что мы не можем использовать оператор OR внутри KeyConditionExpression. Я храню свои ключи I18n в базе данных, и у меня есть следующая структура данных:

{
  "de": "Key in German",
  "en": "Key in English",
  "pk_id": "I18N-12345"
}

У меня также есть пользовательский интерфейс, где у меня есть текстовое поле, которое позволяет мне фильтровать ключи по любому тексту языка. В этом случае engli sh или немецкий, представленный ключами de и en.

Я хотел получить запрос, выражение ключевого условия которого выглядит следующим образом:

{
  KeyConditionExpression: "begins_with(#de, :search_text) OR begins_with(#en, :search_text)"
}

Как уже было сказано, это было бы идеально, но поскольку у нас нет операции OR, я действительно не знаю, как изменить запрос или как создать GSI, позволяющий мне выполнить этот запрос.

Спасибо

1 Ответ

0 голосов
/ 16 января 2020

Вы не объяснили, что такое ключи разделения и сортировки в вашем примере. К сожалению, каждая таблица может иметь только один ключ сортировки - и только этот ключ сортировки может быть эффективно отфильтрован с использованием функции begins_with(), как и вы. И нельзя, чтобы и en, и de были ключами сортировки одной и той же таблицы.

Но есть кое-что, что вы можете сделать с LSI, чтобы обойти это ограничение. Вы можете иметь «en» в качестве ключа сортировки исходной таблицы (я предполагаю, что pk_id является ключом раздела?), А затем создать LSI (это даже не обязательно должен быть GSI - LSI более эффективны), чей ключ раздела то же самое (pk_id), но ключ сортировки "de". Затем вы просто выполняете каждый запрос дважды - один раз для базовой таблицы с begins_with(#en, :search_text) и один раз для LSI с `begin_with (#de,: search_text). «ИЛИ», которое вы хотели, просто означает оба результатов запроса.

...