Можно ли выполнить запрос больше чем в AWS DynamoDB? - PullRequest
2 голосов
/ 29 мая 2020

Допустим, у меня есть такая таблица DynamoDB с Order ID в качестве первичного ключа. :

скриншот стола

Order ID увеличивается на единицу каждый раз, когда я добавляю / помещаю новый элемент.

Теперь у меня есть одно число, скажем, 1000, и мой пользователь хочет получить все элементы, которые имеют Order ID > 1000. Таким образом, возвращаемые предметы будут иметь вид 1001, 1002, 1003 и так далее до последнего.

Мое требование настолько простое, насколько кажется - но возможно ли это сделать с помощью Query метода AWS DynamoDB?

Любая помощь приветствуется :) Спасибо!

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

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

Вы движетесь в правильном направлении с Query, у которого есть чем "оператор. Однако он работает только с атрибутом ключа сортировки.

С помощью Query вы, по сути, выбираете один ключ раздела и предоставляете выражение фильтра, которое применяется к ключу сортировки элементов в этом разделе.
Поскольку ключом раздела в настоящее время является «Идентификатор заказа?», вам нужно добавить глобальный вторичный индекс для запроса нужным вам способом.

Не зная больше о ваших шаблонах доступа, я бы предложил вам добавить глобальный Вторичный индекс с использованием «От» в качестве ключа раздела, который, как я предполагаю, является идентификатором пользователя. Затем вы можете использовать «Идентификатор заказа» в качестве ключа сортировки.

мой пользователь хочет получить все товары с идентификатором заказа> 1000.

С GSI в место, вы можете добиться этого, выполнив запрос для элементов, где "User ID" is userId and "From" > orderId.

Вы можете найти больше по запросу здесь , подробности о добавлении GSI здесь , и подробнее о выборе ключа раздела здесь .

1 голос
/ 29 мая 2020

Нет, потому что Query ожидает точный ключ и не допускает выражения для ключа раздела (однако, для ключа сортировки).

Однако вы могли бы использовать Scan с выражениями FilterExpressions (синтаксис см. в Выражения фильтра для сканирования и Выражения условий ). После этого будут прочитаны все записи и отфильтрованы, так что это не самый эффективный способ.

...