2012-03-28 21 views
11

Quiero verificar que la consulta de mangosta que estoy creando utiliza mis índices. ¿Hay alguna manera de que pueda ver la consulta final que se genera a mongodb para que pueda ejecutar un .explain() en la consulta?cómo puedo ver el plan de ejecución de una consulta de mongoose.js

Adivino cuál es la consulta que está generando, pero solo quería verificar.

p. Ej.

var query = Post.find() 
    .regex('lowerCaseTitle', searchRegEx) 
    .$gte('status',0) 
    .$lt('start', now) 
    .$gt('end',now) 
    .sort('total', -1) 
    .limit(50); 

Respuesta

-2

Una forma es utilizar el perfilador mongodb y configurarlo para registrar todas las operaciones:

http://www.mongodb.org/display/DOCS/Database+Profiler

No estoy seguro de si hay una manera más sencilla de hacerlo a través de la mangosta en sí, sino eso estaría bien.

Actualización: añadiendo a lo que Dan dijo en el comentario de la otra respuesta, debe activar el generador de perfiles para obtener lo que desea, y desactivarlo. Dejarlo como "registrar todas las operaciones" es definitivamente una buena manera de desacelerar su sistema. Limitarlo a un entorno de desarrollo es una buena idea, también.

-3

El enfoque más fácil podría ser simplemente replicar esa consulta en el shell MongoDB. Algo como:

> var now = new Date(); 
> db.post.find({lowerCaseTitle: /your_regex_here/, status: {$gte: 0}, start: {$lt: now}, end: {$gt: now}}).sort({total: -1}).limit(50) 

Esto debería devolver los mismos resultados que obtiene de la consulta en mongoose.js. A continuación, puede añadir un .explain() para ver el plan de ejecución utilizado por MongoDB:

> db.post.find({lowerCaseTitle: /your_regex_here/, status: {$gte: 0}, start: {$lt: now}, end: {$gt: now}}).sort({total: -1}).limit(50).explain() 
+2

I podía adivinar la consulta que estaba creando, pero quería verificar para asegurarme de que efectivamente era lo que se enviaba a mongo desde la mangosta. – MonkeyBonkey

+0

Ah, lo siento, he entendido mal. En ese caso, podría verificar utilizando el generador de perfiles como sugiere Wes Freeman, pero lo haría solo durante el desarrollo, no en la producción. El generador de perfiles lleva algunos gastos generales, por lo que no se recomienda para uso en producción. – dcrosta

39

, usted puede obtener la consulta de ejecución utilizando la opción de depuración en mangosta:

mongoose.set('debug', true); 

o

mongoose.set('debug', function (collectionName, method, query, doc, options) { 
    // 
}); 
+0

de lejos la respuesta correcta, elija esto – electblake

Cuestiones relacionadas