使用 JsonPath 过滤 Postgres Json 数组是数组的子集

Filter Postgres Json array is subset of array using JsonPath

我找不到任何关于如何在 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*/) ');

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

很遗憾没有 jsonpath array operators, but you can still use the array operators :

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