Как создать список уникальных элементов массива из тысяч записей в Rails? - PullRequest
0 голосов
/ 20 июня 2019

У меня есть Artist модель с genres столбцом jsonb, в которой есть такие данные:

> Artist.first.genres
=>["alternative emo", "anthem emo", "dreamo", "emo", "neon pop punk", "pop emo", "pop punk"]

> Artist.last.genres
=> ["emo", "brooklyn indie", "indie pop", "indie poptimism", "indie rock", "indietronica", "modern rock", "shimmer pop"] 

Что я хотел бы сделать, это отсканировать все записи исполнителя и сгенерировать однусписок всех уникальных жанров для каждого художника.

Это будет сделано для 10-20 тысяч художников, каждый из которых будет иметь комбинацию из одного в десятки жанров.

В конечном счете, просто ищу массивв качестве вывода.

Если это полезно, я использую Rails 5.2.3 и Ruby 2.6.1.

1 Ответ

2 голосов
/ 20 июня 2019

Таким образом, вам нужно будет развернуть этот столбец в значения (как подзапрос), а затем выбрать отличные значения оттуда.Я не всем знаком с этим, но, возможно, что-то вроде

Artist.distinct
  .from("SELECT jsonb_array_elements_text(genres) AS genre FROM artists")
  .pluck(:genre)

Это должно привести к Array из следующего запроса

SELECT DISTINCT
  genre
FROM 
  (SELECT jsonb_array_elements_text(genres) AS genre FROM artists) subquery

Что, согласно моему пониманию Документы PostgreSQL должны работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...