簡體   English   中英

Postgres 嵌套 JSONB 查詢

[英]Postgres Nested JSONB Query

我在訂單表中有一個 JSONB 列數據:

# orders.data

{
  discount_codes: [
    { code: 'foo' },
    { code: 'bar'}
  ]
}

# codes_array: ['foo', 'bar', 'baz']

我正在嘗試 select“discount_codes 包含代碼數組中的代碼的訂單”。 我不知道如何准確地編寫這個查詢。 我閱讀了有關 [*] 運算符的信息,但不確定如何在這種情況下使用它。

這僅搜索 discount_codes 的第一個元素:

SELECT *
FROM ORDERS
WHERE data->'discount_codes'->0->'code' ?| array['foo','bar','baz']

這僅搜索“foo”。

SELECT *
FROM ORDERS
WHERE data @@ '$.discount_codes[*].code == "foo"'

我一直在閱讀文檔https://www.postgresql.org/docs/12/functions-json.html#FUNCTIONS-SQLJSON-PATH但我有點迷路了。

您可以將所有代碼提取到一個數組中,然后應用?| 該數組上的運算符:

select *
from orders
where jsonb_path_query_array(data, '$.discount_codes[*].code') ?| array['foo','bar','baz'] 

表達式jsonb_path_query_array(data, '$.discount_codes[*].code')為您的示例 JSON 返回["foo", "bar"]

暫無
暫無

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

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