簡體   English   中英

當第一個父鍵未知時,查詢Postgres JSONB並遍歷嵌套鍵

[英]Query Postgres JSONB with traversal of nested key when first parent key is unknown

我正在嘗試使用JSONB進行查詢,但是我有一個問題,我不知道第一個鍵可能是什么。

理想情況下,我可以在查詢中使用通配符。

例如:以下作品

WHERE json_data #> '{first_key,second_key}' = '"value-of-second-key"'

但我可能不知道first_key的名稱或想要匹配任何嵌套的子鍵。 就像是。

WHERE json_data #> '{*,second_key}' = '"value-of-second-key"'

使用像'*'這樣的通配符會很理想

任何建議或方法將非常感謝。

您不能對#>運算符使用通配符,但可以使用jsonb_each函數來jsonb_each JSON的第一級

SELECT *
FROM jsonb_each('{"foo": {"second_key": "xxx"}, "bar": {"other_second_key": "xxx"}, "baz": {"second_key": "yyy"}}') AS e(key, value)
WHERE e.value @> '{"second_key": "xxx"}';

結果:

 key |         value         
-----+-----------------------
 foo | {"second_key": "xxx"}
(1 row)

如果您只想搜索匹配它的行(而不是上面的確切json元素),您可以使用EXISTS

SELECT ...
FROM the_table t
WHERE EXISTS(
    SELECT 1
    FROM jsonb_each(t.the_jsonb_column) AS e(key, value)
    WHERE e.value @> '{"second_key": "xxx"}'
)

從邏輯上講,這種方法運行正常,但要注意它無法獲得索引的優勢,因為e.value @> '{"foo": {"second_key": "xxx"}}' ,所以如果性能確實如此不過,您可能想重新考慮您的架構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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