Rails 查询界面:选择数据库中任何 JSON 数组的值符合特定条件的行

Rails query interface: selecting rows in database where any of the JSON array's values match a certain criteria

数据库信息:

我需要收集所有列,其中至少有一项的 ID 等于我的值。到目前为止,我已经想出了这个:

    id = 1
    items = PublishingRule.where("menu_items #> '{items,0}' ->> 'id' = ?", id.to_s)

但是此代码仅获取项目数组第一个值符合我的条件的列。我需要将我的代码修改为类似于:

    items = PublishingRule.where("menu_items #> '{items, ANY}' ->> 'id' = ?", id.to_s)

    id = 1
    items = PublishingRule.where("menu_items #> '{items.map}' ->> 'id' = ?", id.to_s)

我该怎么做?

因为在给定的例子中 itemsarray 你不能仅使用运算符来解决它。您需要使用 jsonb_array_elements() 才能对此进行调查。

这是满足您要求的SQL查询示例:

SELECT  *
FROM    publishing_rules
WHERE   EXISTS (
            SELECT  1
            FROM    jsonb_array_elements( menu_items -> 'items' )
            WHERE   value ->> 'id' = '2'
            LIMIT   1
        );

因此,在 WHERE EXISTS 中使用数组查找就可以了。