/ / MongoDB / Ruby (Mongoid): como selecionar apenas documentos incorporados - ruby, mongodb, mongoid

MongoDB / Ruby (Mongoid): como selecionar apenas documentos incorporados - ruby, mongodb, mongoid

Eu tenho uma coleção de usuários. Cada usuário tem uma série de documentos embutidos: solicitações de suporte.

class User < MyModel
include Mongoid::Document
embeds_many :tickets
...
end

class Ticket < MyModel
include Mongoid::Document
embedded_in :user, :inverse_of => :tickets
...
end

Na seção de administração, faço uma consulta para selecionar todas as solicitações de suporte. Mas, como a coleção de ingressos está incorporada, não posso consultar diretamente. Isto é o que consegui:

@users_with_pending_tickets = User.only(:tickets).where("tickets.status" => "Pending")

<% for user in @users_with_pending_tickets %>

<% ticket = user.tickets.where(:status => "Pending").first %>

<%= ticket... %>

<% end %>

Isso definitivamente parece feio. Existe outra maneira?

Respostas:

2 para resposta № 1

Se você precisar recuperar todos os tíquetes, deve ir para um references_many relação em vez de um relacionamento embutido.

O MongoDB deve, eventualmente, oferecer suporte a "coleções virtuais" para resolver esse problema comum, mas, por enquanto, você deve contornar essa limitação.

Para mais informações, consulte minha resposta a esta pergunta semelhante.