Запрашиваете связанную коллекцию с использованием областей MongoMapper? - PullRequest
4 голосов
/ 16 октября 2010
class Comment
  include MongoMapper::Document

  scope :by_rating, lambda { |minimum| where(:rating.gte => minimum) }

  key :rating
  belongs_to :user
end

class User
  include MongoMapper::Document

  many :comments
end


User.first.comments.by_rating(3)

Что на самом деле делает запрос в последней строке? Достаточно ли интеллектуален MongoMapper для выполнения только одного запроса с двумя условиями WHERE (user_id и минимальный рейтинг)?

1 Ответ

1 голос
/ 06 октября 2011

MongoDB не может этого сделать.Это требует объединения, которое он не может сделать.Он преодолевает это ограничение, имея очень масштабируемую производительность чтения и облегченные запросы.Это не проблема.Вы можете увидеть это поведение, установив регистратор в инициализаторе (ищите MongoMapper.connection):

 # Change as appropriate
 MongoMapper.connection = Mongo::Connection.new(
   '127.0.0.1', 27017, :logger => Logger.new(STDOUT))

Затем запустите консоль rails, и вы увидите два запроса:

 User.first.comments
 MONGODB test['users'].find({}).limit(-1)
 MONGODB test['comments'].find(
   {:user_id=>BSON::ObjectId('4e8ddd6bf2c31e7001000001')})
...