Select merge in ecto 3.0

I am implementing select merge to build a query for aggregate functions. This is my code

 Enum.reduce(opts_aggregate, queryable, fn {aggregate_type, fields}, queryable ->
        case aggregate_type do
          "$max" ->
            case fields do
              fields when is_list(fields) ->
                Enum.reduce(fields, queryable, fn field, queryable ->
                  build_max(queryable, field)
                end)

              field when is_binary(field) ->
                build_max(queryable, field)
            end

          "$min" ->
            case fields do
              fields when is_list(fields) ->
                Enum.reduce(fields, queryable, fn  field, queryable ->
                  build_min(queryable, field)
                end)

              field when is_binary(field) ->
                build_min(queryable, field)
            end
 end)

                        
  def build_max(queryable, field) do
    field = Helper.string_to_atom(field)

    from(q in queryable,
      select_merge:  %{"$aggregate": %{"$max": %{^field => max(field(q, ^field))}}}
    )
  end

  def build_min(queryable, field) do
    field = Helper.string_to_atom(field)

    from(q in queryable,
      select_merge:  %{"$aggregate": %{"$min": %{^field => min(field(q, ^field))}}}
    )
  end

The params are :

       opts = %{
         "$aggregate" => %{    
           "$max" => "level",
           "$min" => "beds"
         }
      }  

This is the query i get in returned

 select: merge(merge(f, %{"$aggregate": %{"$max": %{^:level => max(f.level)}}}), %{"$aggregate": %{"$min": %{^:level => min(f.beds)}}})>

I am getting level key in both queries.

      %{"$max": %{^:level => max(f.level)
       %{"$min": %{^:level => min(f.beds)

Am I doing something wrong? Or this is ecto issue?

Is it possible instead of multiple nested merges inside the query I just get query like this:

    select: merge(f, %{"$aggregate": %{"$max": %{^:level => max(f.level)}}}), %{"$aggregate": %{"$min": %{^:level => min(f.beds)}}})>

Thanks