2010-10-16 3 views
4
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 и минимальным рейтингом)?Запрос связанной коллекции с использованием областей MongoMapper?

ответ

1

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

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

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

User.first.comments 
MONGODB test['users'].find({}).limit(-1) 
MONGODB test['comments'].find(
    {:user_id=>BSON::ObjectId('4e8ddd6bf2c31e7001000001')}) 
Смежные вопросы