在 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

Demo