it-swarm-pt.tech

O script mongo Shell não permitirá que eu inclua "use <database>"

Mongo de 32 bits 2.0.1 em uma janela XP máquina

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

execute no banco de dados dbTest digitando os seguintes 2 comandos do Shell:

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

Por enquanto, tudo bem.

Mas se eu tentar incluir a instrução "use" no script, ela falhará:

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

falha com a mensagem de erro da seguinte maneira:

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

Adicionar ou remover ponto e vírgula no test.js não parece importar.

Então, como você coloca uma diretiva "use" em um script mongo Shell?

31
tpascale

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

use dbname
Este comando não funciona no modo de script. Em vez disso, você precisará definir explicitamente o banco de dados na conexão (/ dbname no exemplo acima).

Como alternativa, você também pode criar uma conexão dentro do script:

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

19
hellectronic

Em um script mongo, você pode usar a db.getSiblingDB('new_db_name') para obter uma referência de um novo banco de dados. Portanto, não é obrigatório fornecer o nome do banco de dados na linha de comando. Você pode usar o script.js:

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

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

e a saída desse script é (invocada com mongo script.js):

MongoDB Shell version: 2.2.2
connecting to: test
sag
52
Gabriel Petrovay

Bem, ainda é lamentável que "load ('file.js')" e "mongo file.js" não usem o mesmo interpretador de scripts que o mongo interativo Shell. Abrir a conexão explicitamente no script é potencialmente uma violação do princípio DRY porque o mongo já conhece essa informação. O que funciona, no entanto, é canalizar o arquivo para o mongo em vez de passar seu nome para o linha de comando:

mongo <file.js
16
Olaf Klischat