使用MongoMapper范围查询关联集合?

时间:2010-10-16 13:54:15

标签: mongodb mongomapper

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 个答案:

答案 0 :(得分:1)

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')})