我的数据示例如下所示:
{"city": "NY",
"skills": [
{"soft_skills": "Analysis"},
{"soft_skills": "Procrastination"},
{"soft_skills": "Presentation"}
],
"areas_of_training": [
{"areas of training": "Visio"},
{"areas of training": "Office"},
{"areas of training": "Risk Assesment"}
]}
我想运行一个查询来查找具有 soft_skills
Analysis
的用户,并且可能运行另一个查询来查找训练领域为 Visio
和 Risk Assesment
的用户我的列类型是
jsonb
。如何在这些深度嵌套的对象上实现搜索查询?使用 SELECT * FROM mydata WHERE content::json->>'city'='NY';
查询城市工程的一级我如何还可以使用 LIKE 关键字或字符串匹配来运行深度嵌套值的匹配?
最佳答案
1)
SELECT * FROM mydata
WHERE content->'skills' @> '[{"soft_skills": "Analysis"}]';
2)
SELECT * FROM mydata
WHERE content->'areas_of_training' @> '[{"areas of training": "Visio"},{"areas of training": "Risk Assesment"}]';
About JSON(B) operators
PS:并准备好接受极慢的查询。我强烈建议考虑 data normalization 。
更新
LIKE
对于您的示例数据,它可能是:
SELECT * FROM mydata
WHERE EXISTS (
SELECT *
FROM jsonb_array_elements(content->'areas_of_training') as a
WHERE a->>'areas of training' ilike '%vi%');
但是查询高度取决于实际的 JSON 结构。
关于postgresql - jsonb 字段 PostgreSQL 内的深度搜索,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45000199/