2012-01-04 26 views
5

Estoy tratando de obtener los resultados del comando db.stats() mongo shell en mi código python (para fines de supervisión).MongoDB: cómo obtener db.stats() desde la API

Pero a diferencia de por ejemplo serverStatus no puedo hacer db.command('stats'). No pude encontrar ningún equivalente de API en documentos de mongodb. También probé variaciones con db.$cmd pero nada de eso funcionó.

Así,

pequeña pregunta: ¿cómo puedo obtener resultados de db.stats() (número de conexiones/objetos, el tamaño de los datos & índices, etc) en mi código Python?

Pregunta más importante: ¿alguien puede explicar por qué algunos comandos de shell son fácilmente accesibles desde API, mientras que otros no? Es muy molesto: se puede acceder a algunas herramientas relacionadas con el administrador a través del db.$cmd.sys, algunas a través del db.command, algunas vía ...? ¿Hay algún estándar o explicación de esta situación?

PS: mongodb 2.0.2, 2.1.0 pymongo, pitón 2,7

Respuesta

10

stats de comandos shell El ayudante del Javascript que realmente invoca un comando llamado dbstats, que se puede ejecutar desde PyMongo utilizando el Database.command method. La manera más fácil de averiguar qué comando shell de un ayudante se ejecutará es invocar el ayudante cáscara sin paréntesis - esto va a imprimir el código Javascript que se ejecuta:

> db.stats 
function (scale) { 
    return this.runCommand({dbstats:1, scale:scale}); 
} 

En cuanto a por qué algunos comandos tienen ayudantes y otros hacen no, es principalmente una cuestión de preferencia, tiempo y frecuencia de uso percibida por los autores del controlador. Puede ejecutar cualquier comando por nombre con Database.command, que es solo una envoltura de conveniencia alrededor de db.$cmd.find_one. Puede encontrar una lista completa de comandos en List of Database Commands. También puede submit a patch contra PyMongo para agregar un método de ayuda para los comandos que considere que necesita invocar frecuentemente pero que aún no son compatibles con PyMongo.

+5

Tenga en cuenta que dbstats bloquea su base de datos mientras se ejecuta, por lo que no es adecuada para la producción. https://jira.mongodb.org/browse/SERVER-5714 – whit537

+0

+1 brillante respuesta! –

+0

No está claro que siga siendo una llamada de bloqueo en el motor de almacenamiento 'WiredTiger': http://stackoverflow.com/questions/36559408/is-db-stats-a-blocking-call-for-mongodb –

Cuestiones relacionadas