对JSONB列上存储的数组中的第一个值进行Active Record查询

时间:2018-10-30 14:33:13

标签: ruby-on-rails ruby postgresql jsonb

我有一个场景,对于一个项目,我正在将其“ active_at”的日期记录到存储在JSONB列中的数组中。

所以数据看起来像这样:

active_at:
 {"dates"=>
   ["2018-07-22",
    "2018-09-05",
    "2018-09-06",
    "2018-09-07",
    "2018-09-14",
    "2018-09-15",
    "2018-09-16",
    "2018-10-20",
    "2018-10-21",
    "2018-10-30"]}

我可以按以下方式成功查询列中的数组中的日期匹配:

@item = Item.where('active_at @> ?', {dates: '2018-10-20'.split}.to_json)

但是,我现在只需要查询数组中第一个条目的匹配项。数组中的条目始终按日期顺序排列,因为新值会附加到数组的末尾。

我已经尝试过类似的操作,但是没有任何乐趣:

@item = Item.where('active_at @> ?', {dates['first']: '2018-10-20'.split}.to_json)
@item = Item.where('active_at @> ?', {dates.first: '2018-10-20'.split}.to_json)

1 个答案:

答案 0 :(得分:2)

这应该有效:

Item.where("active_at->'dates'->>0 = ?", "2018-10-20")

SQL Fiddle

我真的会担心此查询的性能,并考虑进行一些架构更改。