如何拦截和记录 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 查询? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何避免重复值? [复制]

Linq to SQL中如何拦截和修改SQL查询

如何在 MongoDB 分片环境中记录所有查询?

MongoDB:如何查询字段为空或未设置的记录?

MongoDB 记录所有查询

如何在mongodb的单个json文档中过滤对象数组? [复制]