【发布时间】:2018-06-27 19:42:13
【问题描述】:
我想看看 mongo java 驱动程序产生什么查询,但我做不到。
使用来自official documentation 的信息,我只能在日志中看到更新操作执行,但我没有看到此操作的查询。
【问题讨论】:
标签: java mongodb mongo-java mongo-java-driver
我想看看 mongo java 驱动程序产生什么查询,但我做不到。
使用来自official documentation 的信息,我只能在日志中看到更新操作执行,但我没有看到此操作的查询。
【问题讨论】:
标签: java mongodb mongo-java mongo-java-driver
您可以将 org.mongodb 的记录器级别设置为 DEBUG,您的 Java 驱动程序将发出详细的记录,如下所示:
2018-01-18 16:51:07|[main]|[NA]|INFO |org.mongodb.driver.connection|Opened connection [connectionId{localValue:2, serverValue:39}] to localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Inserting 1 documents into namespace stackoverflow.sample on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.insert|Insert completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}} to database stackoverflow on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Sending command {findandmodify : BsonString{value='sample'}} to database stackoverflow on connection [connectionId{localValue:2, serverValue:39}] to server localhost:27017
2018-01-18 16:51:07|[main]|[NA]|DEBUG|org.mongodb.driver.protocol.command|Command execution completed
在上面的日志输出中可以看到客户端提交的查询的详细信息:
org.mongodb.driver.protocol.command|Sending command {find : BsonString{value='sample'}}
或者,您可以在服务器端启用profiling ...
db.setProfilingLevel(2)
... 使 MongoDB 分析器收集针对该数据库的所有操作的数据。
分析器输出(包括客户端提交的查询)将写入已启用数据库分析的system.profile 集合。
the docs 中的更多详细信息,但简短的摘要是:
// turn up the logging
db.setProfilingLevel(2)
// ... run some commands
// find all profiler documents, most recent first
db.system.profile.find().sort( { ts : -1 } )
// turn down the logging
db.setProfilingLevel(0)
【讨论】:
o.g.sandbox.mongo.MongoClientTest 是我自己的测试类。我已经更新了答案以消除这种可能的混淆。我的回答 do 中显示的其他日志事件包括 MongoDB find 命令的详细信息,例如Sending command {find : BsonString{value='sample'}}.
{find : BsonString{value='sample'}}是Java驱动提供的查询形式。我原始答案中的其他日志,来自“o.g.sandbox.mongo.MongoClientTest”的日志不是查询它们是文档,即从服务器检索到的文档。生成这些日志语句的代码如下所示:logger.info(document.toJson()。原始形式的确切查询位于 system.profile 集合中的分析器文档中。
如果您使用的是 Spring Boot 1.5.x(我使用的是 1.5.19),您需要将 org.mongodb:mongodb-driver 的版本覆盖到至少 3.7.0 版本才能在日志中获取更多信息。
【讨论】: