mongodb - query - Mongo shell ejecuta la consulta desde el archivo y muestra el resultado
mongodb shell crud (5)
Buena información aquí. Quería señalar que mongo proporciona una función printjson () por lo que no hay necesidad de escribir la suya a menos que necesite más funcionalidad de la que proporciona printjson ().
Ejemplo de archivo Mongo (test.js)
// Pretty print all documents in test.scratch
use test
db.scratch.find().forEach(printjson)
Mando
mongo < test.js
Si desea omitir la use test
del archivo mongo, tal vez para eliminar las indicaciones de error IDE para los archivos js, puede especificar la base de datos de destino en la línea de comandos:
mongo test < test.js
Es interesante tener en cuenta: los ejemplos anteriores utilizan una redirección para insertar el archivo en el shell mongo. Esta convención de llamada le permite ingresar comandos tal como lo haría en el shell; Incluyendo comandos de conveniencia de shell mongo como use test
.
Mongo proporciona otra convención de llamada de script: mongo test test.js
que omite al operador de redireccionamiento. Esta convención de llamada requiere que test.js
sea un javascript adecuado y no puede usar los métodos de conveniencia de shell mongo como use test
; uno usaría los equivalentes de javascript como getSiblingDB()
.
¿Cómo ejecutar un archivo externo usando mongo shell y ver el resultado en la consola?
Tengo un archivo externo, como query.js
y me gustaría ejecutarlo y ver el resultado en cmd.
Digamos, el contenido del archivo es:
db.users.find()
Esto parece haber cambiado en algún momento en el mongo cli, tuve que ejecutar el siguiente comando para ejecutar un archivo en la base de datos (con mongo cli versión 3.4.9)
mongo mongodb://192.168.1.1/YourDataBase scriptFile.js
Luego reemplace 192.168.1.1
con la ip / nombre de host de su base de datos, YourDataBase
con el nombre de la base de datos y señale un archivo existente
La forma más sencilla que encontré de ejecutar consultas mongodb desde un archivo y ver el resultado en la consola es esta:
query.js
:
use my_db;
db.my_collection.findOne()
En la línea de comando: mongo <query.js
Esto muestra todos los resultados a la consola, como si estuviera ejecutando las consultas en el shell mongo individualmente.
Ponga esto en su archivo query.js
:
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
y correr:
mongo db_name query.js
Aquí hay una buena explicación de por qué debes hacerlo de esta manera.
Una cosa que otras respuestas no mencionaron es que el comando use db
no funcionará en un script externo. La mejor manera es usar getSiblingDB
, por ejemplo, si quiero usar una base de datos llamada my_db
:
db = db.getSiblingDB("my_db");
function get_results (result) {
print(tojson(result));
}
db.col.find().forEach(get_results)
Entonces todo funciona como es de esperar. Ver Escribir guiones para el shell mongo .