![](/img/trans.png)
[英]Access to jsonb string value as array and find overlapping with another array
[英]jsonb find a value in an array
有這樣一個數據結構:
Column "recipient" type jsonb
{
"phoneNumbers": [
{
"isDefault": true,
"type": "MOBILE",
"number": "3454654645"
},
{
"isDefault": true,
"type": "MOBILE",
"number": "12423543645"
}
]
}
我需要按數字寫一個搜索請求。 在 postgres 文檔中,我沒有在數組中找到按值搜索,只有通過索引獲得。 它不適合我
我做了這樣的查詢,它被執行了,但是還有其他方法可以搜索數組嗎?
SELECT *
FROM my_table
WHERE recipient -> 'phoneNumbers' @> '[{"number":3454654645}]'
這幾乎是最好的方法,是的。
如果您對recipient
有(GIST)索引,則您的條件不會使用該索引。 但以下可以使用這樣的索引:
SELECT *
FROM my_table
WHERE recipient @> '["phoneNumbers": {"number":3454654645}]}'
如果您使用的是 Postgres 12 或更高版本,您還可以使用 JSON 路徑表達式:
SELECT *
FROM my_table
WHERE recipient @@ '$.phoneNumbers[*].number == "12423543645"'
如果您無法將 JSON object 傳遞給您的查詢,則可以使用 EXISTS 子選擇:
SELECT mt.*
FROM my_table mt
WHERE EXISTS (SELECT *
FROM jsonb_array_elements_text(mt.recipient -> 'phoneNumbers') as x(element)
WHERE x.element ->> 'number' = '3454654645')
'3454654645'
可以作為參數傳遞給您的查詢。 不過,這永遠不會使用索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.