使用 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] ;
我找不到任何关于如何在 Postgres 中使用 JsonPath 进行 in
/ subsetof
/ contains
查询的信息。
例如
假设在名为 data
{
"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] ;