mongoidが実行するクエリを確認する方法

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


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール