Как перехватывать и регистрировать запросы 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)
}