mongoidが実行するクエリを確認する方法メモ。
mongoidが実行するクエリの出力方法
実際にログを出力するのは、mongoidではなくmopedになる。
# [rails root]/config/environments/development.rb # mongoidのログ出力設定。実際にログを出力するのはMopedだけっぽい Mongoid.logger.level = Logger::DEBUG Moped.logger.level = Logger::DEBUG # rails consoleだけにログが出力される Mongoid.logger = Logger.new($stdout) Moped.logger = Logger.new($stdout) # ファイルにログを出力する Mongoid.logger = Logger.new("#{Rails.root}/log/mongoid_development.log") Moped.logger = Logger.new("#{Rails.root}/log/moped_development.log")
実際に出力されるクエリログは下記の通り。
MOPED: [ip address]:27017 QUERY database=[database name] collection=[collection name] selector={"$query"=>{"screen_name"=>"ts_3156"}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (54.6286ms)
このログから察するに、実際に実行されるクエリは下記の通り。
db.[collection name].find({ $query: {"screen_name"=>"ts_3156"}, $orderby: {:_id=>1} }) # explainをする時 db.[collection name].find({ $query: {"screen_name"=>"ts_3156"}, $orderby: {:_id=>1} }).explain()
mongodbにはexplainをした時だけ遭遇するバグがあるっぽいので注意。実際はインデックスを使うのに、インデックスを使わないような表示になるらしい。
MongoDB $query operator ignores index?
参考リンク
Mongoid Getting Started Logging
MongoDB $query operator ignores index?
How can I display MongoDB queries in the rails console/server