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

About these ads

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s