Postgres @> 任意值

Postgres @> Any Value

我有一个查询正在检查 jsonb genre 列并 returning 所有包含已传递类型编号的电影。因此:

SELECT id, name, year, description, "avgRating", "posterPath", genres, "trailerPath", seen 
FROM movies 
WHERE genres @>  
ORDER BY year desc

因此,如果我将“18”作为 </code> 传递(<code> 来自节点模块),示例行将是:

在前端下拉菜单中还包含了一个可以传递的 'ALL' 选择。最初我只是让我的服务器检测到 'ALL' 值,而不是 运行 查询整个 table。不幸的是,当前的实现现在导致了查询组合过滤器的问题,所以我的问题是是否有一个值可以传递给 @> 运算符,可以 return 任何类型的电影,或者我是否需要更改我的查询结构?

--- 编辑有关将数组传递给查询的内容 ---

在 pgAdmin 4 中测试解决方案查询我通过了以下内容:

SELECT id, name, year, description, "avgRating", "posterPath", genres, "trailerPath", seen FROM movies WHERE genres @> [18] ORDER BY year desc

我收到以下错误:

ERROR: syntax error at or near "[" LINE 3: WHERE genres @> [18] ^ SQL state: 42601 Character: 122

箭头意在指向开头的数组括号指出错误的位置

@> 运算符是 contains operator。您应该传递数组 [18] 而不是字符串 18。然后你可以传递一个空数组 [] 如果没有设置特定的过滤器。

WHERE genres @> []

db<>fiddle example

您可以像这样使用布尔逻辑:

WHERE  = 'ALL' OR genres ?  

请注意,这里使用 ? 而不是 @>:后者在 jsonb 数组中搜索一个 jsonb 值,而前者搜索一个text value - 这似乎是你想要的。