如何查看Mongoid的原始mongoDB查询

Ter*_*ara 36 ruby-on-rails mongoid mongodb-query

我按照此页面查看了mongoDB查询.结果我可以看到Moped日志.
但是我看不到原始的mongoDB查询.
如何在rails控制台/服务器中显示MongoDB查询

我确实喜欢以下.

# 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)
Run Code Online (Sandbox Code Playgroud)

如何查看Mongoid的原始mongoDB查询?
我希望看到如下所示.

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

我可以在/var/log/mongo/mongo.log中看到原始的mongoDB查询.
但我希望在ORM(Mongoid)的日志中看到原始查询.

eli*_*ter 8

我想我得到了答案。这是遵循 dsims 的答案,也来自我在有关日志记录的文档中看到的内容。

我有一个初始化文件(config/initializers/mongoid.rb),在那里我有:

Mongoid.logger = Logger.new($stdout)
Mongo::Logger.logger = Logger.new($stdout)
Run Code Online (Sandbox Code Playgroud)

它将 mongo 信息转储到控制台。您可能希望为生产环境更改此设置。但是在开发过程中,我希望能够看到数据库在做什么。特别是因为我是 MongoDb 的新手。

  • 我可以用这种方式看到 Mongo 查询,就像我执行 `Rails.logger.level = :debug` 或 `config.log_level = :debug` 时一样,但我只是看到它们被截断 `"pipeline"=>[{"$匹配”=>{“survey_uuid”=>{“$in”=>[“4542ec5e0-ff90-0136-3d1c-02a18404aeea”,“34dd05b0-6e8...` (2认同)

Mat*_*ord 1

恐怕这就是 mongodb 驱动程序 mongoid 使用的方式,报告它的日志

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

要查看原始查询,您需要像现在一样修改它,只需跟踪 mongodb 日志即可。