Estoy usando la herramienta mongosh actual para ejecutar consultas de Mongo que pueden devolver conjuntos de resultados muy grandes, que podrían no caber en el búfer del símbolo del sistema (e incluso si lo hicieran, copiar dichos resultados a mano llevaría mucho tiempo y sería propenso a errores) . Por lo tanto, me gustaría tener la capacidad de:
mongosh a un archivo de texto, yAquí está el comando que estoy ejecutando actualmente (detalles enmascarados):
mongosh "mongodb://10.20.30.40:26017" --username my_username --password my_password --authenticationDatabase my_database > output.txt Esta es la salida actual que veo en output.txt :
Current sessionID: 1ee96e0f6025ec328ea25ccc Connecting to: mongodb://10.20.30.40:26017 Using MongoDB: 3.4.13 Using Mongosh Beta: 0.0.6 For more information about mongosh, please see our docs: https://docs.mongodb.com/mongodb-shell/ [1G[0J> [3GEntonces parece que la redirección al archivo de salida está funcionando. Sin embargo, parece que no puedo entender cómo especificar un script de Mongo con una consulta real a la herramienta de línea de comandos. Por ejemplo, si quisiera especificar la siguiente consulta de conteo simple, ¿cómo lo haría?
db.getCollection('my_collection').count(); Idealmente, me gustaría que output.txt solo tenga una sola línea con el recuento de esta colección.
La herramienta de línea de comandos anterior de mongo parecía tener varias formas de canalizar una consulta, por ejemplo, especificando un script o usando la opción --eval . La documentación de mongosh afirma que esta herramienta está en modo Beta y admite algún subconjunto de la funcionalidad de mongo . ¿Es compatible con la capacidad de pasar una consulta?
Mientras tanto, esto también funciona con el nuevo mongosh , asegúrese de descargar la última versión (1.1.9 o más reciente)
echo "db.getCollection('my_collection').countDocuments({});" | mongosh --norc --quiet > output.txt mongosh --norc --quiet > output.txt <<EOF db.getCollection('my_collection').countDocuments({}); EOF mongosh --norc --quiet --eval "db.getCollection('my_collection').countDocuments({})" > output.txt Tenga en cuenta que con el shell mongo clásico recibe esta advertencia:
================ Warning: the "mongo" shell has been superseded by "mongosh", which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in an upcoming release. We recommend you begin using "mongosh". For installation instructions, see https://docs.mongodb.com/mongodb-shell/install/ ================ lo cual no es cierto en mi opinión, todavía no veo a new mongosh como sucesor de mongosh . Pero tengo que admitir que cada vez es mejor.
La única forma de deshacerse de esta advertencia es la opción --eval .
Lo siguiente funciona en mongo (todavía tengo que probarlo con mongosh)
mongo --eval "db=db.getSiblingDB('DB NAME'); printjson(db.COLLECTION.findOne())" > output.txt --quietEntonces el tuyo se convertiría en:
mongo "mongodb://10.20.30.40:26017" --username my_username --password my_password --authenticationDatabase my_database --eval "db=db.getSiblingDB('my_database'); printjson(db.my_collection.count())" > output.txt --quiet