【问题标题】:Filter Postgres Json array is subset of array using JsonPath过滤 Postgres Json 数组是使用 JsonPath 的数组的子集
【发布时间】:2022-01-15 19:05:29
【问题描述】:

我找不到任何有关如何在 Postgres 中使用 JsonPath 进行 in / subsetof / contains 查询的信息。

例如 假设在名为data的jsonb列中有如下数据

{
   "name": "foo",
   "somearray" : [1,2,3,4,5]
}

然后我想用类似的东西来查询这个

SELECT *
FROM mytable
where jsonb_path_exists(data, '($.somearray ??????? [2,4,6,8] ');

这确实有效:

SELECT *
FROM mytable
where jsonb_path_exists(data, '($ ? (@.somearray[*] == 2 || @.somearray[*] == 4 /*etc*/) ');

但我希望有一些更短的语法来进行适当的子集测试

【问题讨论】:

  • 我认为没有任何支持。您需要编写自己的代码。或者将您的数据模型规范化为不再需要使用 JSON 的状态

标签: postgresql jsonpath


【解决方案1】:

很遗憾,没有 jsonpath 数组运算符,但您仍然可以使用 array operators

SELECT *
FROM mytable
where (data->>'somearray') :: integer[] @> [2,4,6,8] ;

【讨论】:

  • 非常感谢,我觉得 Json 查询语言不支持这一点有点奇怪。但我会选择你的解决方案。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
相关资源
最近更新 更多