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