【问题标题】:Postgres query records where any element in array of objects in JSONB field contains number > or < xPostgres 查询记录 JSONB 字段中的对象数组中的任何元素包含数字 > 或 < x
【发布时间】:2017-09-16 19:00:34
【问题描述】:

我已经四处搜索,但这似乎是查询 JSONB 字段的一个比常见的更独特的要求,并且还没有找到解决方案。 我的表有一个名为 'plan' 的 jsonb 字段,其内容如下所示:

{
    days: [
        {
            summary: {
                total: 100
            }
        }
    ]
}

days 数组中可能存在无限天对象。是否可以运行查询来选择至少一个日对象中“总计”大于或小于给定数字的所有行?

如有必要,我可以重新排列表格或获取“摘要”数据并将其放入 postgres 数组字段中。

【问题讨论】:

    标签: arrays postgresql object compare jsonb


    【解决方案1】:

    如果我正确理解您的问题,您可以在 jsonb 列 plan 中获取所有 total 不等于的行,例如 101,如下所示:

    SELECT *
    FROM my_table t,
        LATERAL jsonb_array_elements(plan->'days') days
    WHERE
        (days->'summary'->>'total')::integer != 101;
    

    【讨论】:

    • 感谢您的回复。我已经通过将摘要移动到 ARRAY[] 行来解决这个问题,但这可能是一个更简单的修复。有时间我会试试的。
    猜你喜欢
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    相关资源
    最近更新 更多