mongodb_ecto
                                
                                 mongodb_ecto copied to clipboard
                                
                                    mongodb_ecto copied to clipboard
                            
                            
                            
                        How to query on embed field?
Having such schema:
# ProjectUser module
schema "project_users" do
    belongs_to :project, Project
    embeds_many :stats, ProjectUserStat, on_replace: :delete
end
# ProjectUserStat module
  embedded_schema do
    field :date, :string
  end
Tried
      ProjectUser
      |> where([pu], pu.project_id in ^project_ids)
      |> where([pu], pu.stats.date >= ^from)
doesnt work:
** (Ecto.Query.CompileError) `pu.stats().date()` is not a valid query expression
tried with fragments:
      ProjectUser
      |> where([pu], pu.project_id in ^project_ids)
      |> where([pu], fragment("stats.date": ["$gte": ^from, "$lte": ^to]))
doesnt work:
[["stats.date": ["$gte": #BSON.ObjectId<5874d284958c27e7ccd906c3>, "$lte": #BSON.ObjectId<5874d284958c27e7ccd906c4>]]
Instead of having strings it converts them to ObjectIds. I'm using ecto 2.0 with this fork https://github.com/michalmuskala/mongodb_ecto/pull/91, so this might be related to that version only, anyway, any ideas?
After debugging, the solution is to use fragment first and in query after, so this one works:
      ProjectUser
      |> where([pu], fragment("stats.date": ["$gte": ^from, "$lte": ^to]))
      |> where([pu], pu.project_id in ^project_ids)
For some reason it uses wrong arguments position if i do it opposite.
The ordering is definitely a bug.