我已经设置了一个与this example on edgeguides相同的PostgreSQL数组字段。我正在查询这些字段,例如:
Book.where("'fantasy' = ANY (tags)")
但是我需要查询此的逆; tags
不包含“ fantasy”(在此示例中)的所有记录。
任何人都有指导吗?在上述指南之外,我找不到太多有关使用PostgreSQL数组字段的文档。
答案 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")