2016-11-08 1174 views
0

我有表字段jsonb類型並具有以下數據。如何從postgresql json數組字段中獲取數據

{"roles": ["7", "73", "163"]} 

我必須檢查「73」是否存在或不是由postgresql。

我已經搜索,但唯一給對象的對象不是數組的對象的解決方案。

我曾嘗試下面的查詢,但它不工作

SELECT * 
FROM table 
WHERE field->'roles' ? ARRAY ['73']; 

--updated--

也是我需要的只是記錄具有精確值

{「角色」: 「7」]}

{ 「角色」:[ 「7」, 「73」, 「163」]}

即字段僅具有「 7「沒有其他任何東西。

+0

爲什麼你使用'ARRAY ['73']'?你的查詢只用'WHERE field - >'roles'就可以正常工作? 「73''。 – Marth

+1

@Marth:謝謝我已經搜索了超過半天的互聯網和堆棧溢出的解決方案,但你在一分鐘內給它。 – Sandeep

+0

@Marth:我也需要匹配確切的數組。也許這就是爲什麼我使用ARRAY ['73']但它不起作用:( – Sandeep

回答

1

通過文檔https://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLE您的所有情況:

是否在JSON數組-single-項是否存在:

SELECT * 
FROM table 
WHERE field -> 'roles' ? '73'; 

是否-any-鍵的右邊以JSON數組存在:

SELECT * 
FROM table 
WHERE field -> 'roles' ?| ARRAY[ '7', '163' ] ; 

是否-all-右邊的鍵存在於左JSON數組:

SELECT * 
FROM table 
WHERE field -> 'roles' ?& ARRAY[ '7', '163' ] ; 

是否離開JSON數組比賽-exactly-用正確的JSON數組:

SELECT * 
FROM table 
WHERE field -> 'roles' = $$[ "7" ]$$::jsonb ; 

希望幫助:)

+0

謝謝它幫助我很多:) – Sandeep