在 jsonb 的数组中搜索值
Search for value inside an array in a jsonb
如果我有这样的 jsonb 对象:
{
"eligibility": true,
"dates_of_births": [
[
"2010-08-12",
{
"last_name": "abcd",
"first_name": "efgh"
}
],
[
"2009-08-12",
{
"last_name": "xyz",
"first_name": "str"
}
]
]
}
如何查询具有特定名字或出生日期的任何人?本质上我如何在
中搜索值
感谢您的帮助。对于糟糕的对象结构,我深表歉意,但它是在我开始这个项目之前设置的。
您可以将您的 table 加入到来自 jsonb_array_elements(jsdata->'dates_of_births')
的集合中,然后通过使用 @>
运算符过滤出所需的姓名或出生日期,查看左 JSON 值是否包含右 JSON path/value 条目在顶层 ,
并添加 ->>
运算符,以便为 SELECT 列表中的键或索引提取相应的值,例如:
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '[{"first_name": "efgh"}]'::jsonb
或
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '["2009-08-12"]'::jsonb
如果我有这样的 jsonb 对象:
{
"eligibility": true,
"dates_of_births": [
[
"2010-08-12",
{
"last_name": "abcd",
"first_name": "efgh"
}
],
[
"2009-08-12",
{
"last_name": "xyz",
"first_name": "str"
}
]
]
}
如何查询具有特定名字或出生日期的任何人?本质上我如何在
中搜索值感谢您的帮助。对于糟糕的对象结构,我深表歉意,但它是在我开始这个项目之前设置的。
您可以将您的 table 加入到来自 jsonb_array_elements(jsdata->'dates_of_births')
的集合中,然后通过使用 @>
运算符过滤出所需的姓名或出生日期,查看左 JSON 值是否包含右 JSON path/value 条目在顶层 ,
并添加 ->>
运算符,以便为 SELECT 列表中的键或索引提取相应的值,例如:
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '[{"first_name": "efgh"}]'::jsonb
或
SELECT j.value ->> 0 AS "DOB",
(j.value ->> 1)::jsonb ->> 'first_name' AS "First Name",
(j.value ->> 1)::jsonb ->> 'last_name' AS "Last Name"
FROM t
CROSS JOIN jsonb_array_elements(jsdata->'dates_of_births') AS j
WHERE j @> '["2009-08-12"]'::jsonb