Ruby: Переименовать ключи в массиве хэшей?

Как переименовать ключи _id в id в массиве документов MongoDB?

Итак, я хочу сделать следующее:

[{"_id"=>"1", "name"=>"Matt"}, {"_id"=>"2", "name"=>"John"}, ...]

в это:

[{"id"=>"1", "name"=>"Matt"}, {"id"=>"2", "name"=>"John"}, ...]

Ответ 1

Я нашел полное решение.

mongo_db['users'].find().to_a.each do |u|
  u['id'] = u.delete '_id'
end.to_json

Ответ 2

ar = [{"_id"=>"1", "name"=>"Matt"}, {"_id"=>"2", "name"=>"John"}]
ar.each{|h| h.store('id',h.delete('_id'))}
ar # => [{"name"=>"Matt", "id"=>"1"}, {"name"=>"John", "id"=>"2"}]

Если вы не хотите изменять исходный массив, выполните следующие действия:

ar = [{"_id"=>"1", "name"=>"Matt"}, {"_id"=>"2", "name"=>"John"}]
ar.map{|h| {"id"=>h['_id'], "name"=>h['name']} }
# => [{"id"=>"1", "name"=>"Matt"}, {"id"=>"2", "name"=>"John"}]