2011-12-19 12 views
24

32 bits mongo 2.0.1 en una máquina Windows XPmongo no me deja incluyo "uso <database>"

//script filename: test.js (one line shell script file to store a person) 
db.cTest.save({Name: "Fred", Age:21}); 

plazo contra la base de datos dbTest introduciendo los siguientes comandos shell: 2

> use dbTest 
    switched to dbTest 
    > load("test.js") 

Hasta ahora, todo bien.

Pero si trato e incluir el "uso" declaración en el guión falla:

//script filename: test.js (including "use" statement) 
use dbTest; 
db.cTest.save({Name: "Fred", Age:21}); 

falla con msg del error de la siguiente manera:

> load("test.js") 
    SyntaxError: missing ; before statement 
    Mon Dec 19 11:56:31: Error: error loading js file temp.js (shell):1 

adición o eliminación de puntos y comas a Test.js no parece importar

Entonces, ¿cómo pones una directiva de "uso" en un script de mongo shell?

Respuesta

12

http://www.mongodb.org/display/DOCS/Scripting+the+shell

uso nombredb
Este comando no funciona en el modo de guión. En su lugar, deberá definir explícitamente la base de datos en la conexión (/ nombrebd en el ejemplo anterior).

Alternativamente, también se puede crear una conexión dentro de la secuencia de comandos:

db2 = connect ("servidor: 27017/otherdbname")

+1

La respuesta a continuación es la correcta. Para obtener una descripción general de la diferencia entre JS interactivo y con guiones: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#differences-between-interactive-and-scripted-mongo – Rmatt

13

Bueno, todavía es lamentable que (archivo "carga" .js ') "y" mongo file.js "no usan realmente el mismo intérprete de guión que el intérprete de mongo interactivo. Abrir la conexión explícitamente en el script es potencialmente una violación del principio DRY porque mongo ya conoce esa información. Lo que hace el trabajo, sin embargo, es una tubería de la mongo archivo en lugar de pasar a su nombre en la línea de comandos:

mongo <file.js 
+0

esto funciona tal como se esperaba, gracias –

38

En un guión mongo puede utilizar el db.getSiblingDB('new_db_name') para obtener una referencia de una nueva base de datos. Por lo tanto, no es obligatorio dar el nombre de la base de datos en la línea de comando. Usted puede utilizar el script.js:

db = db.getSiblingDB('new_db_name'); 
print(db); 

// the rest of your code for database "new_db_name" 

y la salida de este script es (invocado con mongo script.js):

MongoDB shell version: 2.2.2 
connecting to: test 
sag 
+0

¡Gracias! Súper útil – devshorts

+0

Esto es perfecto para cuando quiere escribir un guión rápido o una función dentro del cofre mongo. La línea clave para cambiar las bases de datos es db = db.getSiblingDB ('new_db_name'); –

Cuestiones relacionadas