ActiveRecord PostgreSQL查询数组

时间:2018-11-05 19:44:30

标签: ruby-on-rails postgresql activerecord

我已经设置了一个与this example on edgeguides相同的PostgreSQL数组字段。我正在查询这些字段,例如:

Book.where("'fantasy' = ANY (tags)")

但是我需要查询此的tags不包含“ fantasy”(在此示例中)的所有记录。

任何人都有指导吗?在上述指南之外,我找不到太多有关使用PostgreSQL数组字段的文档。

2 个答案:

答案 0 :(得分:1)

您可以取消条件

Book.where("NOT('fantasy' = ANY (tags))")

因此,您可以修改查询以获取具有NULL记录的记录:

Book.where("NOT('fantasy' = ANY (tags)) or tags IS NULL")

您还可以在psql中运行这些查询并检查结果

SELECT * FROM book WHERE NOT('fantasy' = ANY (tags)); 
SELECT * FROM book WHERE NOT('fantasy' = ANY (tags)) OR tags IS NULL; 
SELECT * FROM book WHERE 'fantasy' = ANY (tags) 

也许没有标签“ fantasy”的记录吗?

答案 1 :(得分:0)

尝试一下:

Book.where.not('tags @> ARRAY[?]', "fantasy")