我在Postgresql jsonb中有一个embeds_many字段,我试图使用这样的片段查询它:
def find(key, val) do
q = from p in Person,
where: fragment("meta_tags @> ?", ^"'[{\"#{key}\":\"#{val}\"}]'"),
select: p
Repo.all(q)
end
我不明白为什么fragment("meta_tags @> '[{"type":"test"}]'")
中的硬编码值会起作用,但一旦我使用函数输入中的插值,就不会返回任何结果。
日志如下:
不使用插值字符串返回结果。
[debug] QUERY OK source="world_persons" db=15.1ms
SELECT w0."id", w0."name", w0."salutation", w0."original_name",
w0."gender", w0."dob" w0."email", w0."active",
w0."inserted_at", w0."updated_at"
FROM "persons" AS w0
WHERE (meta_tags @> $1) ["'[{\"type\":\"test\"}]'"] []
当我对值进行硬编码时得到结果。
[debug] QUERY OK source="world_persons" db=5.2ms decode=0.1ms
SELECT w0."id", w0."name", w0."salutation", w0."original_name",
w0."gender", w0."dob", w0."email", w0."active",
w0."inserted_at", w0."updated_at"
FROM "persons" AS w0
WHERE (meta_tags @> '[{"type":"test"}]') []
(... results)
这不会使用硬编码值
where: fragment("meta_tags @> ?", ^"[{\"type\":\"test\"}]"),
没有插值运算符
where: fragment("meta_tags @> ?", "[{\"type\":\"test\"}]"),
我在此查询中错过了哪些内容才能使其正常工作?