gpt4 book ai didi

elixir - 在查询表达式中带有动态字段名称的通用可组合Ecto查询

转载 作者:行者123 更新时间:2023-12-04 03:03:49 25 4
gpt4 key购买 nike

我试图允许传入一个字段名称,并在Ecto查询表达式中动态运行它,如下所示:

def count_distinct(query, field_name) when is_binary(field_name) do
query
|> select([x], count(Map.fetch!(x, field_name), :distinct))
end


但是,出现此编译错误:

(Ecto.Query.CompileError) `Map.fetch!(x, field_name)` is not a valid query expression


有什么办法可以做到这一点?

最佳答案

您需要使用field/2动态生成查询中的字段:

query
|> select([x], count(field(x, ^field_name), :distinct))


使用其他查询语法完成的示例:

from x in query,
select: count(field(x, ^field_name), :distinct)

关于elixir - 在查询表达式中带有动态字段名称的通用可组合Ecto查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com