2017-09-16 93 views
0

我已经搜索了周围,但这似乎是一个更常见的查询JSONB字段的要求比普通,并没有找到解决方案然而。 我的表有一个jsonb场称为“计划”,其内容如下:Postgres查询记录JSONB字段中的对象数组中的任何元素包含数字>或<x

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

有可能是潜在的日子数组内无限天的对象。是否可以运行一个查询来选择至少一个天对象中'total'大于或小于给定数字的所有行?

如果有必要,我可以重新安排表或采取“汇总”数据,并将其放入postgres数组字段。

回答

1

如果我正确理解你的问题,你可以在你jsonb列取得与total所有行​​不等于说101,如下:

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

感谢您的答复。我已经通过将摘要移动到ARRAY []行来解决这个问题,但这可能是一个更简单的解决方法。我会在某个时候尝试。 – Henry

相关问题