web-dev-qa-db-ja.com

Mongoidで生のmongoDBクエリを確認するにはどうすればよいですか?

このページをたどって、mongoDBクエリを確認しました。その結果、原付ログを見ることができました。
しかし、生のmongoDBクエリが表示されません。
MongoDBクエリをRails console/server に表示するにはどうすればよいですか?

私は以下が好きでした。

# in [Rails root]/config/environments/development.rb    
Mongoid.logger.level = Logger::DEBUG
Moped.logger.level = Logger::DEBUG
Mongoid.logger = Logger.new("#{Rails.root}/log/mongoid_development.log")
Moped.logger = Logger.new("#{Rails.root}/log/moped_development.log")

# in [Rails root]/log/mongoid_development.log
# show nothing.

# in [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)

Mongoidで生のmongoDBクエリを表示するにはどうすればよいですか?
以下のように見たいです。

db.[collection name].find({ $query: {"screen_name"=>"ts_3156"}, $orderby: {:_id=>1} })

/var/log/mongo/mongo.logで生のmongoDBクエリを確認できます。
しかし、ORM(Mongoid)のログに生のクエリを表示したい。

37

私は答えを得たと思います。これは、dsimsの回答に従い、ロギングに関するドキュメントで見たものからです。

初期化ファイル(config/initializers/mongoid.rb)があり、そこに次のものがあります。

Mongoid.logger = Logger.new($stdout)
Mongo::Logger.logger = Logger.new($stdout)

それはコンソールにmongo情報をダンプします。実稼働環境では、これを変更することをお勧めします。しかし、開発中は、DBが何をしているのかを確認できるようにしたいと思います。特に私はMongoDbを初めて使用するためです。

5
eliotRosewater

それがmongodbドライバーmongoidが使用する原付の方法だと思います、それはログだと報告しています

https://github.com/mongoid/moped/blob/a995d859d85144b47523829f54384bd8d8a870dc/lib/moped/protocol/query.rb#L172

生のクエリを表示するには、mongodbログをテールするだけなので、これを変更する必要があります。

1
MatthewFord

Mongoidでクエリコマンドを実行するには、プロジェクトディレクトリからmongoを実行してクエリを記述します。ユーザーテーブルが存在する場合は、show collectionsdb.users.findなどの例。

0
Oluwayetty