簡體   English   中英

如何針對 JSON ARRAY 中的給定鍵檢查給定值是否存在?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM