首页 > 解决方案 > 选择合并在 Enum.reduce 中没有按预期工作

问题描述

这些是参数:

 %{"$select" => %{"$avg" => ["arrive_at"], "$count" => ["arrive_at"]}}

这是代码:

 Enum.reduce(select, [], fn {key, value}, fields ->
              Enum.reduce(value, fields, fn {k, v}, fields ->
                query = from p in model, select: %{}
                query = if k == "$avg" do
                  from p in query, select_merge: %{avg: avg(p.id)}
                else
                  query
                end
                IO.inspect query

                   query = if k == "$count" do
                     from p in query, select_merge: %{count: count(p.pass)}
                   else
                    query
                   end

首先,此代码将为“$avg”运行,此查询将返回

  #Ecto.Query<from m in Model, select: %{avg: avg(m.id)}>  

第二次运行“$count”。由于此代码query = from p in model, select: %{} .,它将再次重置为空的选择地图`,我得到的结果是:

    #Ecto.Query<from m in Model, select: %{count: count(m.pass)}>

它返回最后一个查询的结果。我想要的是这样的:

 #Ecto.Query<from h in Model, select: %{avg: avg(h.id), count: count(h.pass)}>

谢谢。

标签: elixirecto

解决方案


推荐阅读