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は、2つのWHERE条件(user_idと最小評価)で1つのクエリのみを実行するのに十分インテリジェントですか?

4

1 に答える 1

1

MongoDBはそれを行うことができません。それには、それができない結合が必要です。非常にスケーラブルな読み取りパフォーマンスと軽量のクエリを使用することで、この制限を克服します。それは問題ではありません。この動作は、イニシャライザーでロガーを設定することで確認できます(MongoMapper.connectionを検索してください)。

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

次に、Railsコンソールを起動すると、2つのクエリが表示されます。

 User.first.comments
 MONGODB test['users'].find({}).limit(-1)
 MONGODB test['comments'].find(
   {:user_id=>BSON::ObjectId('4e8ddd6bf2c31e7001000001')})
于 2011-10-06T17:02:24.440 に答える