mongoid group_by返回一个hashmap而不是一个哈希数组

Ste*_*yen 5 ruby ruby-on-rails mongodb mongoid

我想从mongoid group_by而不是数组中检索一个hashmap

Product.group_by {|p| p.user_id }
Run Code Online (Sandbox Code Playgroud)

返回映射数组

result = Product.group_by {|p| p.user_id } 

=> [ {"12354asdf" => [product1, product2, product3]},
{"safakjgh314" => [product4, product5, product6]} ]
Run Code Online (Sandbox Code Playgroud)

我目前正在运行以下查询的结果,以实现映射的单个哈希

result.reduce Hash.new, :merge
Run Code Online (Sandbox Code Playgroud)

=> {"12354asdf"=> [product1,product2,product3],"safakjgh314"=> [product4,product5,product6]}

有没有更有效的方法来做到这一点?

编辑***分组后,我宁愿操作一个有意义的可枚举的集合.

result.each do |k v| k v end
Run Code Online (Sandbox Code Playgroud)

而不是

result.each do |h| h.keys.first, h.values.first end
Run Code Online (Sandbox Code Playgroud)

它目前返回的例子.

[ 
  {user_object => [item1, item2, item3] },
  {user2_object => [item1, item2, item3] },
  {user2_object => [item1, item2, item3] }
]
Run Code Online (Sandbox Code Playgroud)

Uri*_*ssi 3

关于迭代哈希数组的更紧凑的方法,您可以采用每个元素的first

result.map(&:first).each do |k, v|
  puts k
  puts v.count
end
# 12354asdf
# 3
# safakjgh314
# 3
Run Code Online (Sandbox Code Playgroud)