2011-12-19 4 views
24

32-bitową Mongo 2.0.1 na komputerze z systemem Windows XPMongo skrypt nie pozwoli mi to "stosowanie <database>"

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

bieg przeciwko bazy dbTest wprowadzając następujące komendy powłoki: 2

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

Jak dotąd, tak dobrze.

Ale gdy próbuję i obejmują „użytkowania” oświadczenie w skrypcie nie powiedzie:

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

nie powiedzie się z powodu błędu MSG następująco:

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

Dodawanie lub usuwanie średników do test.js nie ma znaczenia.

Jak zatem umieścić dyrektywę "use" w skrypcie powłoki Mongo?

Odpowiedz

12

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

użycie nazwa_bd
Komenda ta nie działa w trybie skryptów. Zamiast tego konieczne będzie jawne zdefiniowanie bazy danych w połączeniu (/ dbname w powyższym przykładzie).

Alternatywnie, można również utworzyć połączenie w skrypcie:

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

+1

Poniższa odpowiedź jest prawidłowa. Omówienie różnicy między interaktywnym a skryptowym JS: https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#differences-between-interactive-and-scripted-mongo – Rmatt

13

Cóż, to nadal jest niefortunne, że „load ('file .js ') "i" mongo file.js "w rzeczywistości nie używają tego samego interpretera skryptów co interaktywna skorupa mongo. Otwarcie połączenia jawnie w skrypcie jest potencjalnie naruszeniem zasady DRY, ponieważ mongo zna już tę informację. Co działa, choć jest potokiem plik do Mongo zamiast przekazując jej nazwę w wierszu poleceń:

mongo <file.js 
+0

działa to zgodnie z oczekiwaniami, dzięki –

38

W skrypcie Mongo można użyć db.getSiblingDB('new_db_name') uzyskać odniesienie do nowej bazy danych. Tak więc nie jest obowiązkowe podawanie nazwy bazy danych w linii poleceń. Można użyć script.js:

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

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

a wyjście tego skryptu jest (wywołany z mongo script.js):

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

Dzięki! Super pomocny – devshorts

+0

Jest to idealne rozwiązanie, gdy chcesz napisać szybki skrypt lub funkcję z poziomu powłoki Mongo. Kluczową linią do przełączania baz danych jest db = db.getSiblingDB ('new_db_name'); –

Powiązane problemy