Есть ли способ в MongoMapper для достижения такого же поведения, что и метод include в AR? - PullRequest
0 голосов
/ 27 марта 2012

Есть ли в MongoMapper функция, эквивалентная этой:

class Model < ActiveRecord::Base
  belongs_to :x
  scope :with_x, includes(:x)
end

При запуске Model.with_x это позволяет избежать N запросов к X. Есть ли аналогичная функция в MongoMapper?

1 Ответ

1 голос
/ 28 марта 2012

Когда это отношение belongs_to, вы можете включить карту идентификации и выполнить два запроса, один для ваших основных документов, а затем один для всех связанных документов. Это лучшее, что вы можете сделать, поскольку Mongo не поддерживает объединения.

class Comment
  include MongoMapper::Document
  belongs_to :user
end

class User
  include MongoMapper::Document
  plugin MongoMapper::Plugins::IdentityMap
end

@comments = my_post.comments                # query 1
users = User.find(@comments.map(&:user_id)) # query 2

@comments.each do |comment|
  comment.user.name # user pulled from identity map, no query fired
end

(Mongoid имеет синтаксис для быстрой загрузки , но работает в основном так же.)

...