KeyConditionExpression
может применяться только к разделу и, при необходимости, для сортировки ключа.Документация гласит следующее.
Используйте параметр KeyConditionExpression, чтобы указать конкретное значение ключа раздела.Операция Query вернет все элементы из таблицы или индекса с этим значением ключа раздела.При желании вы можете сузить область действия запроса, указав значение ключа сортировки и оператор сравнения в KeyConditionExpression.
Та же документация продолжается с
Для дальнейшего уточненияРезультаты запроса, вы можете дополнительно предоставить FilterExpression.FilterExpression определяет, какие элементы в результатах должны быть возвращены вам.Все остальные результаты отбрасываются.
Таким образом, вы можете использовать FilterExpression
, чтобы еще больше сузить набор результатов, что может обеспечить поддержку для вашего второго варианта использования.
Если этонедостаточно, вам, вероятно, нужно изучить с использованием индексов , Global Secondary Index (GSI) специально.В основном индекс создаст другую таблицу с другими ключами.Чтобы удовлетворить ваше второе требование, я думаю, что может работать следующая структура GSI:
name | code
-----------
PRD | 425
PRD | 456
PRD | 427
....
Где name
- ключ раздела, а код - ключ сортировки.Но эти пары атрибутов всегда должны составлять уникальный первичный ключ для каждой записи, в противном случае вы не сможете использовать эту структуру.
Приложение : после просмотра моего поста и перечитывания вашего вопроса я понял,что у вас нет отдельных атрибутов имени и кода, но есть один атрибут с такими данными, как «PRD 425» и «PRD 426».У меня нет опыта в этом.В документации Query снова говорится следующее о KeyConditionExpression
Условие, которое указывает значения ключа для элементов, которые должны быть получены действием Query.
Условие должно выполнятьсятест на равенство для одного значения ключа секции.
Условие может дополнительно выполнять один из нескольких сравнительных тестов для одного значения ключа сортировки.Это позволяет Query получать один элемент с заданным значением ключа раздела и значением ключа сортировки или несколько элементов, имеющих одинаковое значение ключа раздела, но разные значения ключа сортировки.
Насколько я понимаю, выне может ограничить его требуемым способом.
Приложение 2 : После долгих раздумий я вспомнил, что Документация DynamoDB обычно предлагает стратегию, в которой к ключу раздела добавляется случайный номернапример.К сожалению, у меня нет подробной информации о том, как выполнять запросы к этой схеме, но она должна дать вам советы по организации ваших данных.