2011-12-19 13 views
24

32 bit mongo 2.0.1 su una macchina Windows XPmongo script di shell non mi permette di includere "usare <database>"

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

corsa contro banca dati dbTest inserendo i seguenti 2 comandi di shell:

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

Finora, tutto bene.

Ma se provo e comprendono la "usano" l'istruzione nello script non riesce:

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

fallisce con msg di errore come segue:

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

aggiunta o la rimozione di punti e virgola test.js non sembra avere importanza

Quindi, come si inserisce una direttiva "use" in uno script mongo shell?

risposta

12

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

uso dbname
Questo comando non funziona in modalità script. Dovrai invece definire esplicitamente il database nella connessione (/ dbname nell'esempio sopra).

In alternativa, è anche possibile creare un collegamento all'interno dello script:

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

+1

La risposta sotto è quella corretta. Per una panoramica della differenza tra JS interattivo e script: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#differences-between-interactive-and-scripted-mongo – Rmatt

13

Beh, è ​​ancora un peccato che ('file di caricamento" .js ') "e" mongo file.js "in realtà non usano lo stesso interprete di script della shell mongo interattiva. Aprire esplicitamente la connessione nello script è potenzialmente una violazione del principio DRY perché mongo già conosce quell'informazione. Ciò che funziona, però, è il piping file in mongo invece di passare il suo nome sulla riga di comando:

mongo <file.js 
+0

funziona come previsto, grazie –

38

In uno script mongo è possibile utilizzare il db.getSiblingDB('new_db_name') per ottenere un riferimento di un nuovo database. Quindi, non è obbligatorio fornire il nome del database nella riga di comando. È possibile utilizzare il script.js:

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

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

e l'uscita di questo script è (invocato con mongo script.js):

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

Grazie! Super utile – devshorts

+0

Questo è perfetto per quando vuoi scrivere uno script veloce o una funzione dall'interno della shell mongo. La linea chiave per cambiare i database è db = db.getSiblingDB ('new_db_name'); –

Problemi correlati