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
