当前位置: 首页 > 知识库问答 >
问题:

如何使用mongo java驱动程序将实际查询记录到MongoDB

秦信瑞
2023-03-14

我想看看mongo java驱动程序产生了什么查询,但我不能这样做。

使用官方文档中的信息,我只能在日志中看到更新操作执行的情况,但没有看到该操作的查询。

共有1个答案

郎玮
2023-03-14

您可以将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'}}

或者,您可以在服务器端启用分析...

db.setProfilingLevel(2)

...使MongoDB探查器收集针对该数据库的所有操作的数据。

探查器输出(包括客户端提交的查询)被写入system.profile集合(无论启用了哪一个数据库探查)。

文件中的更多细节,但简短的摘要如下:

// 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)
 类似资料:
  • 问题内容: 我正在尝试编写一个简单的数据库应用程序,该应用程序可以访问多个数据服务器,一些MySQL,MSSQL和SqlLite3。我正在使用“数据库/ SQL”包来访问它们。 我需要将SQL查询记录到各个服务器上,以进行调试和审核。我该如何实现? 问题答案: 假设您不想使用服务器日志记录功能,显而易见的解决方案是在进行所有查询时简单地记录它们。 这是您问题的基本解决方案。您可以通过多种方式对其进

  • 问题内容: 我正在尝试禁用的日志输出。 在加载驱动程序之前,我曾尝试在应用程序的开头设置这些设置,但没有帮助。 我收到这种日志: 所以我的控制台完全塞满了mongo日志,我什么也看不到。 问题答案: 所以这解决了这个问题: 如果您希望隐藏所有日志,可以将其设置为较高的值。

  • 问题内容: 我正在尝试或在MongoDB中使用某些条件(使用Java驱动程序)。这就是我在做什么: 我想在这些条件下使用操作数,但是我想默认值是“和”,我不知道如何更改它。在上面的代码中,如果条件之一返回,结果也将是。 问题答案: 您正确地说,在查询中指定多个字段的“默认”是每个字段都用作条件过滤器,因此是“与”运算。 您可以使用具有以下语法的$ or操作数,通过OR子句执行MongoDB查询:

  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 我使用下面的mongo查询来获取最高温度。有人能帮助我们如何使用mongo java驱动程序,使用和在java中实现吗?

  • 我试图在MongoDB\驱动程序\查询中使用选项: 如果$选项似乎可以: --------$options: 数组([排序]= $query没有给我好的选项: 限制和批量大小不等于20,为什么?请问怎么办? 提前感谢