代码之家  ›  专栏  ›  技术社区  ›  script

在Exto 3.0中选择合并

  •  0
  • script  · 技术社区  · 6 年前

    我正在实现select merge以构建聚合函数的查询。这是我的密码

    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))}}}
    )
    

    结束

    参数是:

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

    这是我得到的回答:

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

    我得到了 level 输入两个查询。

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

    我做错什么了吗?或者这是体外受精的问题?

    是否可以不在查询中进行多个嵌套合并我只得到如下查询:

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

    谢谢

    0 回复  |  直到 6 年前