MongoDB / Ruby (Mongoid): как выбрать только внедренные документы - PullRequest
1 голос
/ 03 января 2011

У меня есть коллекция пользователей. У каждого пользователя есть массив встроенных документов: запросы поддержки.

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

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

В разделе администратора я делаю запрос, чтобы выбрать все запросы поддержки. Но так как коллекция билетов встроена, я не могу делать запросы напрямую. Вот что я получил:

@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 %>

Это определенно выглядит безобразно. Есть ли другой способ?

1 Ответ

2 голосов
/ 03 января 2011

Если вам нужно получить все билеты, вы должны использовать отношение references_many вместо встроенного отношения.

MongoDB должен в конечном итоге поддерживать «виртуальные коллекции» для решения этой распространенной проблемы, но сейчас вам нужно обойти это ограничение.

Для получения дополнительной информации см. мой ответ на этот вопрос.аналогичный вопрос .

...