Как перехватывать и регистрировать запросы mongodb?

Как я могу получить точный запрос от gmongo водитель к mongod (для целей отладки).

В MySQL это достигается путем добавления logSql = true к источнику данных.

Я пишу совокупный запрос с соответствующим конвейером между начальной и конечной датой. Даты даны как обычные классы даты Java.

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

                            $gte: fromDate,

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

И это, кажется, не фильтрует результаты, основанные на дате. Это возвращает мне все.

2 ответа

Нет способа сделать это из драйвера, я нашел лучший способ сделать это - использовать mongosniff, См. http://docs.mongodb.org/manual/reference/program/mongosniff/

Как получить точный запрос от драйвера 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)
}
Другие вопросы по тегам