簡體   English   中英

jsonb 在數組中找到一個值

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

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