首页 > 解决方案 > Active Record Array 数组查询 - 检查数组中存在的记录

问题描述

我有一个目标模型,它有一个称为标签的属性,其值是数组数据类型。我需要查询其标签属性具有某些特定数组中存在的值的所有目标。

例如:我有一个数组

a = ["textile", "blazer"]

Objective.labels值可能为["textile, "ramen"]

我需要返回所有可能将“纺织品”或“西装外套”作为标签数组值之一的目标

我尝试了以下方法:

Objective.where("labels @> ARRAY[?]::varchar[]", ["textile"])

这会返回一些记录。现在当我尝试

Objective.where("labels @> ARRAY[?]::varchar[]", ["textile", "Blazer"])

我希望它返回所有包含至少一个标签数组值作为纺织品或西装外套的目标。

但是,它返回一个空数组。任何解决方案?

标签: ruby-on-railsrubyactiverecord

解决方案


尝试&&重叠运算符。

重叠(有共同的元素)

Objective.where("labels && ARRAY[?]::varchar[]", ["textile", "Blazer"])

如果您有很多行,GIN 索引可以加快速度。


推荐阅读