如何拦截和记录 mongodb 查询? [复制]
Posted
技术标签:
【中文标题】如何拦截和记录 mongodb 查询? [复制]【英文标题】:How to intercept and log mongodb queries? [duplicate] 【发布时间】:2015-08-31 22:46:19 【问题描述】:如何获取从gmongo
驱动程序发送到mongod
的确切查询(用于调试目的)。
在mysql中是通过将logSql = true
添加到数据源来实现的。
我正在编写一个聚合查询,其中包含开始日期和结束日期之间的匹配管道。日期以普通 java Date 类的形式给出。
db.collection.aggregate(
[
$match:
[
dateIssued: [
$gte: fromDate,
$lte: toDate
]
]
],
[
$group:
[
_id: "\$type",
total:
[
$sum: 1
]
]
])
而且它似乎没有根据日期过滤结果。它把一切都还给了我。
【问题讨论】:
【参考方案1】:驱动程序无法做到这一点,我发现最好的方法是使用mongosniff
。见http://docs.mongodb.org/manual/reference/program/mongosniff/
【讨论】:
Graeme,不确定这里是否适合通知您,但我们无法解决 ***.com/questions/30714307/…。我们已经尝试逐步完成 mongodb 插件尝试做的事情,但无济于事。我希望你能花几秒钟来看看我的问题。谢谢【参考方案2】:如何获得从 gmongo 驱动程序发送到 mongod 的确切查询(用于调试目的)?
开启mongodbprofiling即可log all your queries。
在 mysql 中,它是通过将 logSql = true 添加到数据源来实现的。
我认为您希望这会根据您在 Grails 中的配置自动发生。然后,执行以下操作:
在Config.groovy
:
mongo.profiling.enabled = true
在Bootstrap.groovy
:
GMongo mongo = new GMongo(grailsApplication.config.grails.mongo.host, grailsApplication.config.grails.mongo.port)
DB db = mongo.getDB(grailsApplication.config.grails.mongo.databaseName)
if( grailsApplication.config.grails.mongo.username )
boolean auth = db.authenticate(grailsApplication.config.grails.mongo.username ,
grailsApplication.config.grails.mongo.password ? grailsApplication.config.grails.mongo.password.toCharArray() : "" )
if( !auth )
log.error( "MongoDB failed to authenticate")
return
if( grailsApplication.config.mongo.profiling.enabled )
db.setProfilingLevel(2)
else
db.setProfilingLevel(0)
【讨论】:
以上是关于如何拦截和记录 mongodb 查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章