Rails 查询界面:选择数据库中任何 JSON 数组的值符合特定条件的行
Rails query interface: selecting rows in database where any of the JSON array's values match a certain criteria
数据库信息:
数据库:PostgresSQL
Table 姓名:publishing_rules
列名称:menu_items
列格式:JSON
示例列值:{"items":[{"id":1,"title":"dfgdfg"},{"id" :2,"title":"sdf"}]}
我需要收集所有列,其中至少有一项的 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)
我该怎么做?
因为在给定的例子中 items
是 array 你不能仅使用运算符来解决它。您需要使用 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
中使用数组查找就可以了。
数据库信息:
数据库:PostgresSQL
Table 姓名:publishing_rules
列名称:menu_items
列格式:JSON
示例列值:{"items":[{"id":1,"title":"dfgdfg"},{"id" :2,"title":"sdf"}]}
我需要收集所有列,其中至少有一项的 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)
我该怎么做?
因为在给定的例子中 items
是 array 你不能仅使用运算符来解决它。您需要使用 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
中使用数组查找就可以了。