2012-04-11 22 views
47

He estado usando archivos mongo y de la escritura como esto:Cómo pasar argumentos a Mongo Guión

$ mongo getSimilar.js 

me gustaría pasar un argumento al archivo:

$ mongo getSimilar.js apples 

Y luego, en el archivo de script recoger el argumento pasado en

var arg = $1; 
print(arg); 

Respuesta

84

Uso --eval y utilizar secuencias de comandos shell para modificar el comando aprobada en

mongo --eval "print('apples');"

O Hacer variables globales (crédito a Tad Marshall):

$ cat addthem.js 
printjson(param1 + param2); 
$ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js 
15 
+1

Esto no funciona con mapreduce, la función reduce() no tiene acceso a los parámetros (ReferenceError: ... no se define cerca ...) – Thomas

+2

--eval es muy útil. digamos que queremos cambiar rápidamente a secundario para convertirnos en primarios en un conjunto de replicación. Utilice un script 'conf = rs.conf() conf.members.forEach ( función (miembro) { \t member.priority = 0.5 } ) conf.members [memberId] .priority = 1 // rs.reconfig (conf) 'guardar esta secuencia de comandos en chooseprimary.js y correr con' mongo --eval "var memberId = 3" chooseprimary. js'. memberId debe ser la identificación del secundario que deseas convertirte en primario. Solo asegúrese de ejecutar mongo --eval en el servidor primario. :) – Willmore

+0

Esto funcionó, gracias :) – Bastion

14

no se puede hacer eso, sino que podría ponerlos en otro guión y cargar esa primera:.

// vars.js 
msg = "apples"; 

y getSimilar.js fue:

print(msg); 

continuación:

$ mongo vars.js getSimilar.js 
MongoDB shell version: blah 
connecting to: test 
loading file: vars.js 
loading file: getSimilar.js 
apples 

No es tan conveniente, sin embargo. .

+0

impresionante, gracias por la información! Tengo algunos guiones que serían un poco difíciles para '--eval'. –

1

Establecer una cáscara var:

password='bladiebla' 

Crear secuencia de comandos js:

cat <<EOT > mongo-create-user.js 
print('drop user admin'); 
db.dropUser('admin'); 
db.createUser({ 
user: 'admin', 
pwd: '${password}', 
roles: [ 'readWrite'] 
}); 
EOT 

guión paso a Mongo:

mongo mongo-create-user.js 
+1

esto no funciona con 2.4. ¿Puedes apuntar a la documentación o expandir esto? –

+1

esto tampoco funciona con 3.4, expanda ... – singh1469

2

que utiliza un script de shell a un comando de tubería mongo mongo a. En el comando mongo He utilizado un arg pasé a la secuencia de comandos shell (es decir que utilicé $1):

#!/bin/sh 

objId=$1 
EVAL="db.account.find({\"_id\" : \"$objId\"})" 
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet 
+0

¿No debería ser 'find ({\" _ id \ ": ObjectId (\" $ objId \ ")})'? ¿O hay una forma de configurar mongo para que no tenga que usar el tipo 'ObjectId()'? – Bear

0

escribí una pequeña utilidad para resolver el problema para mí. Con la utilidad mongoexec, que sería capaz de ejecutar el comando ./getSimilar.js apples añadiendo lo siguiente al comienzo de su script:

#!/usr/bin/mongoexec --quiet 

Dentro de la secuencia de comandos, a continuación, puede acceder a los argumentos como args[0].

https://github.com/pveierland/mongoexec

+0

No funciona; Me están negando el acceso. 'sudo' no funciona. Cambiar el shebang para que apunte al ejecutable ubicado en el directorio de usuario (en lugar de/usr/bin) no funciona. Estaba emocionado de usarlo. Ojalá pudiera hacerlo funcionar. – Bear

+1

@Bear Las instrucciones no mencionan que el script debe ser ejecutable. Si ejecuta "sudo chmod + rx/usr/bin/mongoexec" debería funcionar. – user764486

Cuestiones relacionadas