首页 > 解决方案 > 查询子字段的对象的 JSONB 数组

问题描述

我遇到了障碍,这个 SO question的第二个答案让我如此接近!

使用 postgresql,我的订单表上有一个 jsonb,places,形状如下:

[
 { "delivery_place" : { "id" : "abc", "name" : "my place" } },
 { "delivery_place" : { "id" : "xyz", "name" : "your place" } }
]

我的目标是使用 ILIKE 查询“名称”详细信息以检索正确的订单。通常我会这样做:

select id from orders, jsonb_array_elements(orders.places) as places where places -> 'delivery_place' ->> 'name' ILIKE '%my%'

我正在使用 Rails 6 并且已经.from()定义了一个子句,并且不能轻易地将其覆盖为可选的搜索条件。所以我想弄清楚如何只用这个where子句来做到这一点。

上面的链接帖子似乎通过使用@>运算符让我完成了 90% 的工作。因此我可以做select id from orders where orders.places @> '["delivery_place" : {"name": "my place"}]'但是我不知道如何将它与 ILIKE 结合起来。

这甚至可能吗?如果没有,有没有一种我没有注意到的方法?尝试使用 jsonb_array_elements 在 where 直接给了我一个错误,但也许有办法?如果没有,有人知道学习如何with在 Rails 6 中使用子句的任何资源吗?

标签: postgresqljsonbruby-on-rails-6

解决方案


推荐阅读