Postgres 嵌套 JSONB 查询
Postgres Nested JSONB Query
我在订单 table:
中有一个 JSONB 列数据
# orders.data
{
discount_codes: [
{ code: 'foo' },
{ code: 'bar'}
]
}
# codes_array: ['foo', 'bar', 'baz']
我正在尝试 select“订单 discount_codes 包含 codes_array 中的代码”。我无法弄清楚如何准确地编写此查询。我阅读了有关 [*] 运算符的信息,但不确定如何在此上下文中使用它。
这只搜索 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')
returns ["foo", "bar"]
JSON
我在订单 table:
中有一个 JSONB 列数据# orders.data
{
discount_codes: [
{ code: 'foo' },
{ code: 'bar'}
]
}
# codes_array: ['foo', 'bar', 'baz']
我正在尝试 select“订单 discount_codes 包含 codes_array 中的代码”。我无法弄清楚如何准确地编写此查询。我阅读了有关 [*] 运算符的信息,但不确定如何在此上下文中使用它。
这只搜索 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')
returns ["foo", "bar"]
JSON