我有表字段jsonb类型并且具有以下数据。
{"roles": ["7", "73", "163"]}
我必须通过postgresql检查“73”是否存在。
我已经搜索了但是唯一的解决方案是对象的对象而不是数组的对象。
我尝试过以下查询,但它不起作用
SELECT *
FROM table
WHERE field->'roles' ? ARRAY ['73'];
- 更新 -
我也只需要那个具有确切价值的记录
{“roles”:[“7”]}
{“roles”:[“7”,“73”,“163”]}
即。字段中只有“7”而不是其他内容。
答案 0 :(得分:1)
通过文档https://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE了解所有案例:
-single-密钥是否存在于json数组中:
SELECT *
FROM table
WHERE field -> 'roles' ? '73';
右边的键是否存在于json数组中:
SELECT *
FROM table
WHERE field -> 'roles' ?| ARRAY[ '7', '163' ] ;
左边的json数组中是否存在-all-右键:
SELECT *
FROM table
WHERE field -> 'roles' ?& ARRAY[ '7', '163' ] ;
左json数组是否与正确的json数组匹配 -
SELECT *
FROM table
WHERE field -> 'roles' = $$[ "7" ]$$::jsonb ;
希望有所帮助:)