Я создаю имя храма BlogAuthor
в AWS DynamoDB со следующей структурой:
authorId | orgId | age |name
Позже мне нужно сделать такой запрос: get all authors from organization id = orgId123 with age between 30 and 50, then sort their name in alphabet order
.
Я не уверен, что такой запрос можно выполнить в DynamoDB (позже я применю его в AppSync), поэтому первое решение - создать индекс (GSI) с partitionKey=orgId
, sortKey=age
(окончательное имя orgId-age-index
).
Но затем, когда вы пытаетесь выполнить запрос в DynamoDB, задайте partitionKey orgId = orgId123, sortKey age = [30; 50] и фильтра нет; тогда я могу иметь список авторов. Однако невозможно отсортировать этот список по запросу name
из приведенного выше запроса.
Я повторяю другое решение, создавая новый индекс с partitionKey=orgId
и sortKey=name
. Затем выполните запрос (не сканирование) в DynamoDB с помощью partitionKey orgId = orgId123, установите пустое значение sortKey (потому что мы хотим сортировать только по имени вместо получения определенного имени) и отфильтруйте age
в диапазоне [30; 50]. Это решение кажется работающим, однако я замечаю, что фильтр применяется к списку результатов - например, к списку результатов с 100 элементами, но после применения фильтра по возрасту может остаться до 70 элементов или ничего. Но я всегда надеюсь, что он вернет 100 предметов.
Не могли бы вы сказать мне, что-то не так с моими подходами? Или можно сделать такой запрос в DynamoDB?
Другой (маленький) вопрос - когда подключить эту таблицу к API-интерфейсу AppSync: если такой запрос выполнить невозможно, то такой запрос также не возможен в AppSync?