查询embeds_many并不会通过插值返回结果

时间:2017-03-29 01:16:57

标签: elixir phoenix-framework ecto

我在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\"}]"),

我在此查询中错过了哪些内容才能使其正常工作?

0 个答案:

没有答案