【问题标题】:Postgres Nested JSONB QueryPostgres 嵌套 JSONB 查询
【发布时间】:2023-04-07 17:30:01
【问题描述】:

我在订单表中有一个 JSONB 列数据:

# orders.data

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

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

我正在尝试选择“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,但我有点迷茫。

【问题讨论】:

    标签: sql json postgresql jsonb


    【解决方案1】:

    您可以将所有代码提取到一个数组中,然后在该数组上应用?| 运算符:

    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"]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2023-04-03
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2017-02-23
      相关资源
      最近更新 更多