如何使用 Mongoid 查看原始 mongoDB 查询

Posted

技术标签:

【中文标题】如何使用 Mongoid 查看原始 mongoDB 查询【英文标题】:How can I see raw mongoDB queries with Mongoid 【发布时间】:2013-07-31 09:06:21 【问题描述】:

我按照这个页面查看了 mongoDB 查询。结果,我可以看到轻便摩托车的日志。 但我看不到原始 mongoDB 查询。How can I display MongoDB queries in the 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)

? 我想看到像下面这样的。

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

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

【问题讨论】:

2 年后仍然没有像样的答案? 起来!这对于熟悉 mongodb 中的 CRUD 非常有帮助。 对于那些希望将轻便摩托车登录到控制台的人:Moped.logger = Logger.new($stdout) 签出this。希望对您有所帮助。 对于未来的访问者,如果您想要类似于活动记录的漂亮彩色日志记录,您可能需要查看the mongo beautiful logger gem 【参考方案1】:

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

我有一个初始化文件 (config/initializers/mongoid.rb),其中有:

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

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

【讨论】:

我可以通过这种方式看到 Mongo 查询,就像我做 Rails.logger.level = :debugconfig.log_level = :debug 时一样,但我只是看到它们被截断了 "pipeline"=>["$match"=>"survey_uuid"=>"$in"=>["4542ec5e0-ff90-0136-3d1c-02a18404aeea", "34dd05b0-6e8...【参考方案2】:

要使用 Mongoid 运行查询命令,请从项目目录运行 mongo 以编写您的查询。如果存在用户表,例如 show collectionsdb.users.find

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于如何使用 Mongoid 查看原始 mongoDB 查询的主要内容,如果未能解决你的问题,请参考以下文章

如何将内存中的 MongoDB 与 Rails、Mongoid 和 Rspec 一起使用?

如何实现has_many:通过与Mongoid和mongodb的关系?

如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)

批量查找 mongoDB 记录(使用 mongoid ruby​​ 适配器)

如何避免在 MongoDB(使用 Mongoid)或 ActiveRecord(使用 MySQL 的 Rails)中插入两次相同的记录?

如何在 Mongoid / MongoDB 中为 $within 查询选择单位