Запросите Dynamodb с несколькими ключами сортировки - PullRequest
0 голосов
/ 19 января 2020

Как я могу запросить динамо-базу данных, отсортированную по двум атрибутам?

Скажем, например, моя сущность github_repository. С атрибутами имя (S), владелец (S), часы (I), звезды (I) и вилки (I).

(S) - строка: (I) - int

И я хочу вернуть топ-10 github_repositories по звездам и вилкам. Скажем, если два элемента имеют одинаковые звезды, я использую вилки в качестве прерывателя t ie при сортировке.

Спасибо

Ответы [ 2 ]

1 голос
/ 21 января 2020

Если вы знаете, как вы хотите отсортировать кортеж (stars, fork), вы можете сериализовать его в соответствующую строку и использовать его в качестве ключа сортировки.

В вашем случае вы сказали :

Я хочу вернуть топ-10 github_repositories по звездам и вилкам. Скажем, если два элемента имеют одинаковые звезды, я использую вилки в качестве прерывателя t ie при сортировке.

Так что, если «звезды» - это числа от 0 до 9, а «вилки» (? ) также от 0 до 9, вы просто соединяете два числа вместе, чтобы получить одну строку. Или возьмите 10-значный номер, если вы хотите обратную сортировку (сначала самые высокие звезды). Например, предмет с 3 звездами и 6 вилками получит строку «74». Если один элемент имеет больше звездочек, чем другой, он будет первым в порядке сортировки. Если два предмета имеют одинаковые звезды, то первым должен быть предмет с большим количеством вилок. Как вам требуется.

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

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

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

  • Используйте ключ сортировки, который представляет собой сумму звездочек и вилок (если это подходит для вашего варианта использования).
  • Fetch первая десятка начинается, а затем локально использует сортировку для вилок (но это может привести к проблеме, если номер 10 имеет меньше вилок, чем номер 11).
...