Wrong group query when trying to build dynamically

I am trying to working on a query builder and the example/content is just imaginary.

query = from en in Data.InfectionRevision
query = from q in query, select: map(q, [:is_complete, :is_active])

query = from(q in query,select_merge: %{"$aggregate": %{"$max": %{^"revision_id" => max(q.revision_id)}}})
query = from(q in query,group_by: q.encounter_id,
 select_merge: %{"$group" => %{^"encounter_id" => q.encounter_id}})

But the query I get is having incorrect key for group, although I have passed correct key while building query. this is what I got

#Ecto.Query<from i0 in Data.InfectionRevision, group_by: [i0.encounter_id],
 select: merge(merge(
   map(i0, [:is_complete, :is_active]), 
   %{"$aggregate": %{"$max": %{^"revision_id" => max(i0.revision_id)}}}), 
   %{"$group" => %{^"revision_id" => i0.encounter_id}})>

%{"$group" => %{^"revision_id" => i0.encounter_id}} should be actually %{"$group" => %{^"encounter_id" => i0.encounter_id}}
What Step or part of the query I am building wrong? How to fix it?

Note:

  • sample project on which you can run/build above queries
  • Please ignore the query content, it might not makes sense because its just an example and should work dynamically as its part of dynamic query builder
  • I need to build query step by step from passed params dynamically