【问题标题】:How to create list of unique array items from thousands of records in Rails?如何从 Rails 中的数千条记录中创建唯一数组项列表?
【发布时间】:2019-11-03 16:41:55
【问题描述】:

我有一个带有 genres jsonb 列的 Artist 模型,其中包含如下数据:

> 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-20k 艺术家中完成,每个艺术家都有一到几十个流派的任意组合。

最终只是寻找一个数组作为输出。

如果有用的话,我正在运行 Rails 5.2.3 和 Ruby 2.6.1。

【问题讨论】:

  • 与“独立摇滚”相比,“布鲁克林独立”会被视为“独特”,还是应该将流派分开为["brooklyn","indie", "indie", "rock"]
  • @engineersmnky "brooklyn indie" 与 "indie rock" 相比是独一无二的。

标签: ruby-on-rails arrays ruby


【解决方案1】:

因此,您必须将该列展开为值(作为子查询),然后从那里选择不同的值。 我对此并不熟悉,但可能类似于

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 Docs 的理解应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2021-12-21
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多