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