首页 > 解决方案 > JSON中的Postgres查询数组元素?

问题描述

我有一个名为 fb_designs 的 Postgres 11 表,其中有一json列的数据结构如下:

{
    "listings": [
       {
            "id": "KTyneMdrAhAEKyC9Aylf",
            "active": true
        },
        {
            "id": "ZcjK9M4tuwhWWdK8WcfX",
            "active": false
        }
    ]
}

和格式为 so的tags列。两个长度都是未定义的。character varying[]{dWLaRWChaThFPH6b3BpA,BrYiPaUiou020hsmRugR}

我想做的是产生一些查询,让我用外行的话来说,

显示所有 items.listings 处于活动状态且标签包含的所有结果BrYiPaUiou020hsmRugR

我已经做到了这一点,但是我不确定如何添加WHERE uid = "foo"WHERE tags contains "foo", "bar并且WHERE title is like %hoot%

SELECT id, title, tags, selected_preview_image, items
FROM  fb_designs r, json_array_elements(r.items#>'{listings}') obj 
WHERE  obj->>'active' = 'true' 
GROUP BY id

标签: postgresql

解决方案


如果它们都是真的,那么它们都不是假的。听起来您想否定包含错误的遏制操作。

select * from fb_designs where 
    not items::jsonb @> '{"listings":[{"active": false}]}'
    and tags && ARRAY['BrYiPaUiou020hsmRugR']::varchar[]

推荐阅读