mongodb - fields - mongo dbname--eval ''db.collection.find()'' no funciona
pymongo find (2)
¿Por qué funciona esto?
# mongo dbname
MongoDB shell version: 1.8.3
connecting to: nextmuni_staging
> db.collection.find()
{ "foo" : "bar" }
> bye
Si bien esto no funciona:
# mongo localhost/dbname --eval ''db.collection.find()''
MongoDB shell version: 1.8.3
connecting to: localhost/dbname
DBQuery: dbname.collection -> undefined
Debería ser exactamente lo mismo, ¿no?
¡Gracias!
El valor de retorno de db.collection.find()
es un tipo de cursor. La ejecución de este comando desde el shell creará un cursor y le mostrará la primera página de datos. Puedes comenzar a repasar el resto repitiendo el comando ''it''.
Creo que el alcance de las variables utilizadas durante la ejecución de un script de evaluación es solo durante la vida útil del script (los datos pueden persistir en las colecciones, por supuesto), por lo que una vez que el script termine, esas variables del cursor ya no existirán, por lo que sería capaz de enviar otro script eval para paginar los datos. Por lo tanto, el comportamiento que se obtiene durante una sesión de shell realmente no funcionaría desde un script eval.
Para acercarse al comportamiento, podría ejecutar algo como esto:
mongo dbname --eval "db.collection.find().forEach(printjson)"
Eso le muestra que el comando se ejecuta y produce un cursor que luego puede iterar sobre el envío de la salida a la salida estándar.
Edit: Creo que lo que intentaba señalar era que el comando que está emitiendo está funcionando, solo que la salida no es lo que esperaba.
Las funciones de printjson
cubren mucho terreno al hacer scripts con mongo --eval ''...''
. En lugar de encadenar. Para .forEach
uno, simplemente puede ajustar su llamada.
$ mongo --eval ''db.stats_data.stats()'' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
[object Object]
$ mongo --eval ''db.stats_data.stats().forEach(printjson)'' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
Tue Jan 10 15:32:11.961 TypeError: Object [object Object] has no method ''forEach''
$ mongo --eval ''printjson(db.stats_data.stats())'' db_name
MongoDB shell version: 2.4.14
connecting to: db_name
{
"ns" : "db_name.stats_data",
"count" : 5516290,
"size" : 789938800,
"avgObjSize" : 143.20110073980882,
"storageSize" : 1164914688,
"numExtents" : 18,
"nindexes" : 3,
"lastExtentSize" : 307515392,
"paddingFactor" : 1.0000000000000457,
"systemFlags" : 1,
"userFlags" : 0,
"totalIndexSize" : 1441559616,
"indexSizes" : {
"_id_" : 185292688,
"owner_id_key_idx" : 427678384,
"onwer_metric_key_idx" : 828588544
},
"ok" : 1
}