针对多个值查询 Postgres 中的 jsonb 列

Query jsonb column in Postgres against multiple values

我的 PostgreSQL 数据库中有一个类型为 jsonb 的列 'carInfo',我希望能够查询多个值。我希望查询 return 只有那些符合所有条件的行。例如,如果我有多个列,我会这样写查询:

select * 
from car 
where name = 'BMW' 
AND 'year' = 2020

因为我的专栏是 jsonb 类型,所以我可以像这样使用包含运算符 (@>):

select * 
from car 
where carInfo @> cast('{"name":"BMW"}') as jsonb 
  AND carInfo @> cast('{"year":"2020"}')

但我希望查询是动态的,以便用户可以通过他们想要的任何属性进行查询。

因此,他们将发送一个搜索词列表(在这种情况下,该列表的元素将是 {"name":"BMW"}{"year":"2020"}

假设我有上面的列表,如果我想获得与使用 AND 运算符时相同的结果,查询会是什么样子?

我这样试过:

select * 
from car 
where carInfo @> any(array['{"name":"BMW"}', '{"year":"2020"}']::jsonb[])

但它的作用与使用 OR 运算符时相同。我需要找到包含两个搜索词的那些行

您可以使用 @> ALL,但这个应该更好:

WHERE carInfo @> cast('{"name":"BMW", "year": "2020"}' as jsonb)