Elixir 查询嵌入了';t使用插值返回结果

Elixir 查询嵌入了';t使用插值返回结果,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我在Postgresql jsonb中有一个Embeddes_many字段,我尝试使用如下片段查询它: def find(key, val) do q = from p in Person, where: fragment("meta_tags @> ?", ^"'[{\"#{key}\":\"#{val}\"}]'"), select: p Repo.all(q) end 我不明白为什么片段(“meta_tags@>'

我在Postgresql jsonb中有一个Embeddes_many字段,我尝试使用如下片段查询它:

 def find(key, val) do
     q = from p in Person,
           where: fragment("meta_tags @> ?", ^"'[{\"#{key}\":\"#{val}\"}]'"),
           select: p
     Repo.all(q)
 end
我不明白为什么
片段(“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\"}]"),

我在这个查询中遗漏了什么使这个工作正常?

这个查询有错误吗?还是没有结果?没有结果。为了清楚起见,让我更新我的问题。您能检查日志并发布硬编码时执行的查询和使用插值执行的查询吗?添加调试日志更清晰。:-)将其显式转换为
text
然后
jsonb
fragment(“meta\u标记@>?::text::jsonb”,^“[{\”{key}\:\“{val}\””)