【问题标题】:How to intercept and log mongodb queries? [duplicate]如何拦截和记录 mongodb 查询? [复制]
【发布时间】: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
                            ]
                    ]
            ])

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

【问题讨论】:

    标签: mongodb grails gmongo


    【解决方案1】:

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

    【讨论】:

    • Graeme,不确定这里是否适合通知您,但我们无法解决 stackoverflow.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)
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2017-03-07
      • 2017-02-15
      • 2021-07-12
      • 1970-01-01
      • 2020-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多