Запросы на внедренные документы с Mongoid / MongoDB (Rails) - PullRequest
2 голосов
/ 02 марта 2011

Я пытаюсь выяснить, какова производительность с Mongoid при выполнении запросов к встроенным документам.Я довольно плохо знаком с Mongoid и MongoDB, поэтому, если вы заметите что-то, что вы считаете плохой практикой, пожалуйста, дайте мне знать.

Вариант использования:

Предположим, у меня есть «пост» со множеством встроенных комментариев.Комментарии являются многопоточными, и каждый многопоточный комментарий имеет поле parent_id, указывающее родительский комментарий, которому они принадлежат.Пример документа 'post':

{ 
  "_id": 1, "username": "Foo", "body": "Hi!", 
  "comments": [ 
                {"_id": 123, "body": "<3"}, 
                {"_id": 124, "body": "</3", "parent_id": "123"}, 
                ... 
              ]
}

Теперь предположим, что в сообщении содержится огромное количество комментариев.Когда я сохраняю новый комментарий, я хочу определить, с каким количеством комментариев новый комментарий делится своим родителем.Поэтому я делаю это:

class Comment
  include Mongoid::Document
  field :body
  field :parent_id
  embedded_in :post, :inverse_of => :comments

  before_save :determine_amount
  def determine_amount
    return if self.parent_id.blank?
    amount = self.node.comment.where(:parent_id => self.parent_id).count

    # Do something with it...
  end
end

Мне интересно, где и как Mongoid выполняет этот запрос и насколько эффективен этот запрос.Насколько я знаю, запрос не попадает в базу данных, что имеет смысл, потому что документ Topic уже загружен, а комментарии являются поддокументом этого.

Кто-нибудь будет так любезен, чтобы дать мнеинструкции о том, как Mongoid обрабатывает эти случаи?

...