我的数据示例如下所示:

{"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 的用户,并且可能运行另一个查询来查找训练领域为 VisioRisk 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/

10-15 00:46