我有以下架构,它是一个post表的JSONB字段,它将保存所有使用的标签。
schema "posts" do
...
field :tags, {:array, :string}
...
end
它有一个“标签”数组作为“字符串”。我想在这个数组中搜索一个字符串值。我试过了:
def search_by_tag(query, tag) do
from p in query,
where: fragment("? @> ?", p.tags, ^tag)
end
但是没有成功,我正在寻找的是一种搜索JSONB数组并在值存在时找到值的方法。此外,它应该保持查询的功能与非JSONB查询兼容,继续这样做:
Blog.Post |> Blog.Post.search_by_tag("tag1") |> Blog.User.active()
答案 0 :(得分:1)
undefined
函数需要第二个operant是数组,所以:
@>
此外,ecto语法支持这种情况:
def search_by_tag(query, tag) do
tags = [tag]
from p in query,
where: fragment("? @> ?", p.tags, ^tags)
end
对于可组合查询def search_by_tag(query, tag) do
from p in query,
where: tag in p.tags
end
,您可以考虑使用"pipe-based syntax"