json - 在 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"
}
]
]
}
如何查询具有特定名字或出生日期的任何人?本质上,我如何在
谢谢您的帮助。我为糟糕的对象结构感到抱歉,但在我开始从事这个项目之前,它已经设置好了。
解决方案
您可以将表加入来自的集合jsonb_array_elements(jsdata->'dates_of_births')
,然后通过使用@>
运算符过滤出所需的名称或出生日期,该运算符查看左侧 JSON 值是否包含顶层的右侧 JSON 路径/值条目,
并添加->>
运算符以提取 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
推荐阅读
- java - 如何从 swt.SelectionListener 中找到事件类型?
- laravel - Laravel Eloquent:在主要语句上应用“with where”过滤器
- jquery - 根据表单输入数创建多维数组
- jquery - JQuery 3.4.1 支持哪个版本的 bootstrap
- docker - 具有特定用户的 Gitlab CI 作业
- javascript - 哈希链接与导航菜单不匹配
- swift - 在 Swift 5 中的 applicationWillResignActive 中显示图像
- flutter - 如何防止关闭 CupertinoActionSheet/showCupertinoModalPopup?
- c# - Sage 200:无法将许多 *.dll 文件添加到我的 Visual Studio C# 项目中以使 Sage 200 基本功能正常工作
- jekyll - Jekyll 和 GitHub 页面无法在 localhost 上正确构建