[英]How to check whether a given value exists against a given key inside a JSON ARRAY?
我有一個 JSON 類型的列。 里面的 JSON 是這樣的:
{
"user_info":
[
{"name":"Team member 1","email":"abc@xyz.com","employee_id":"1"},
{"name":"Team member 2","email":"def@xyz.com","employee_id":"2"}
]
}
如何檢查此 JSON 中是否存在電子郵件“abc@xyz.com”?
您可以使用 JSON 路徑表達式:
select *
from the_table
where the_column @@ '$.user_info[*].email == "abc@xyz.com"';
這假設the_column
被定義為jsonb
(它應該是)。 如果不是,則需要強制轉換: the_column::jsonb
假設數據類型jsonb
。
您可以在任何支持jsonb
(Postgres 9.4+) 的版本中使用帶有@>
運算符的普通包含:
SELECT *
FROM tbl
WHERE js @> '{"user_info":[{"email":"abc@xyz.com"}]}';
看:
或者帶有@?
Postgres 12 或更高版本中的運算符:
SELECT *
FROM tbl
WHERE js @? '$.user_info[*].email ? (@ == "abc@xyz.com")';
看:
任一查詢都可以使用 JSON 列上的索引,同樣有效。 運算符類jsonb_path_ops
比默認的jsonb_ops
更小更快,但支持的運算符集更小:
CREATE INDEX tbl_js_path_ops_idx ON tbl USING gin (js jsonb_path_ops);
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.