4

如何获取从gmongo驱动程序发送到的确切查询mongod(用于调试目的)。

mysql中,它是通过添加logSql = true到数据源来实现的。

我正在编写一个聚合查询,其中包含开始日期和结束日期之间的匹配管道。日期作为普通的 java Date 类给出。

db.collection.aggregate(
            [
                $match:
                    [
                        dateIssued: [

                            $gte: fromDate,

                            $lte: toDate
                        ]
                    ]
            ], 
            [
                $group:
                    [
                        _id: "\$type", 
                        total: 
                            [
                                $sum: 1
                            ]
                    ]
            ])

而且它似乎没有根据日期过滤结果。它把一切都还给了我。

4

2 回答 2

0

驱动程序无法做到这一点,我发现最好的方法是使用mongosniff. 见http://docs.mongodb.org/manual/reference/program/mongosniff/

于 2015-06-16T10:06:53.357 回答
0

如何获取从 gmongo 驱动程序发送到 mongod 的确切查询(用于调试目的)?

打开 mongodb分析,您可以记录所有查询

在 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)
}
于 2015-06-16T11:36:59.480 回答