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

Active Record query on first value in stored array on JSONB column

我有一个场景,对于一个项目,我将 '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)

这应该有效:

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

SQL Fiddle

我真的很关心这个查询的性能并考虑做一些架构更改。