Postgresql
匹配 JSON 數組的元素
這是一個範例表:
create table test( id int, json_key json[] ); insert into test (id,json_key) values (1,array['{"key1":"123"}'::json,'{"key2":"456"}'::json]), (2,array['{"key1":"789"}'::json,'{"key2":"456"}'::json]);
json_key 輸出為:
{{"key1":"123"},{"key2":"456"}}
我正在嘗試執行
select * from test where json_key->>'key2'='456';
但它不起作用:(我怎樣才能執行這個查詢?
嘗試將某些內容與數組元素匹配的一種方法是使用
ANY
. 唯一的事情是找到可以與之一起使用的正確運算符。在這種情況下,<@
將成為我們的朋友(您可以在文件的正確頁面找到它和其他人)。完成後,它變得容易:SELECT * FROM test WHERE '{"key2": "456"}'::jsonb <@ ANY(json_key::jsonb[]); id │ json_key ────┼───────────────────────────────────────────── 1 │ {"{\"key1\":\"123\"}","{\"key2\":\"456\"}"} 2 │ {"{\"key1\":\"789\"}","{\"key2\":\"456\"}"}
為了證明它確實符合我們的預期:
test=# SELECT * FROM test WHERE '{"key1": "456"}'::jsonb <@ ANY(json_key::jsonb[]); id │ json_key ────┼────────── test=# SELECT * FROM test WHERE '{"key1": "123"}'::jsonb <@ ANY(json_key::jsonb[]); id │ json_key ────┼───────────────────────────────────────────── 1 │ {"{\"key1\":\"123\"}","{\"key2\":\"456\"}"}
在dbfiddle上觀看它的實際操作。