Ecto - 基于共同密钥合并结果?

时间:2016-09-10 03:54:05

标签: elixir ecto

我有这个问题:

query = from(p in Tree,
        join: kw in assoc(p, :kw),
        join: k in Keyo, on: k.id == kw.keyo_id,
        where: p.user_id == ^id,
           select: %{
           tree: p.name,
           keyword: k.keyword,              
            },
        )

它返回结果如:

[%{keyword: "jesus", tree: "baila"}, %{keyword: "clinton", tree: "baila"},
 %{keyword: "bush", tree: "baila"}, %{keyword: "red", tree: "default"},
 %{keyword: "sea", tree: "default"}, %{keyword: "apple", tree: "default"}]

是否可以将具有相同列名的数据库返回结果以某种方式组合在一起?类似于:

%{
 baila: [%{keyword: "jesus"}, %{keyword: "clinton"},
 %{keyword: "bush"}

 default: [%{keyword: "red"},
 %{keyword: "sea"}, %{keyword: "apple"}] 
}

1 个答案:

答案 0 :(得分:1)

使用Elixir标准库非常容易! Enum.group_by/3可以让您实现目标。使用您的示例,它看起来像这样:

my_data = [%{keyword: "jesus", tree: "baila"},
           %{keyword: "clinton", tree: "baila"},
           %{keyword: "bush", tree: "baila"},
           %{keyword: "red", tree: "default"},
           %{keyword: "sea", tree: "default"},
           %{keyword: "apple", tree: "default"}]
IO.inspect Enum.group_by(my_data, &(&1.tree))

Elixir Playground Source

希望这有帮助!

相关问题