December 2, 2011
Ordenando documentos embutidos no mongodb

Fala galera! Precisei recentemente fazer um ordenação de um documento embutido no mongodb utilizando a gem mongoid

Imagine a estrutura a seguir:

user.rb

class User
  include Mongoid::Document
  field :name, :type => String,  :index => true
  embeds_many :lists
end

list.rb

class List
  include Mongoid::Document
  field :name, :type => String, :index => true
  embedded_in :user
  embeds_many :items
end

item.rb

class Item
  include Mongoid::Document
  field :name, :type => String, :index => true
  field :price, :type => Float
  embedded_in :list
end

Agora a pergunta que não quer calar! Como consigo ordernar todos os itens de todas as listas de um usuário por um determinado atributo do item, por exemplo price?

Éis a solução!

user.rb

class User
  include Mongoid::Document
  field :name, :type => String,  :index => true
  embeds_many :lists

  def items(sort="price", ord="asc")
    self.lists.map(&:items).flatten.sort do |x,y|
      if ord == "desc"
        y[sort]  x[sort]
      else
        x[sort]  y[sort]
      end
    end
  end
end

É isso ai! Espero que tenha ajudado! Abraços


  1. diegoalvareznogueira posted this
Blog comments powered by Disqus