programing

mongo 셸 스크립트는 "use"를 포함하지 못하게 합니다.

megabox 2023. 7. 8. 10:47
반응형

mongo 셸 스크립트는 "use"를 포함하지 못하게 합니다.

윈도우즈 XP 시스템의 32비트 mongo 2.0.1

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

다음 2개의 셸 명령을 입력하여 데이터베이스 dbTest에 대해 실행합니다.

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

지금까지, 좋아요.

그러나 스크립트에 "사용" 문을 포함하려고 하면 실패합니다.

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

다음과 같은 오류 메시지와 함께 실패합니다.

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

test.js에 세미콜론을 추가하거나 제거하는 것은 문제가 되지 않는 것 같습니다.

그렇다면 몽고 쉘 스크립트에 "사용" 지침을 어떻게 넣습니까?

몽고 스크립트에서 사용할 수 있습니다.db.getSiblingDB('new_db_name')새 데이터베이스의 참조를 가져옵니다.따라서 명령줄에서 데이터베이스 이름을 지정할 필요는 없습니다.사용할 수 있습니다.script.js:

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

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

그리고 이 스크립트의 출력은 다음과 같습니다.mongo script.js):

MongoDB shell version: 2.2.2
connecting to: test
sag

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

dbname 사용
이 명령은 스크립트 모드에서는 작동하지 않습니다.대신 연결에 데이터베이스를 명시적으로 정의해야 합니다(위 예제의 /dbname).

또는 스크립트 내에 다음과 같은 연결을 만들 수도 마찬가지입니다.

db2 = connect("서버":27017/otherdbname")

음, "load('file.js')"와 "mongo file.js"가 실제로 대화형 mongo 셸과 동일한 스크립트 인터프리터를 사용하지 않는다는 것은 여전히 유감스러운 일입니다.mongo는 이미 이 정보를 알고 있기 때문에 스크립트에서 연결을 명시적으로 여는 것은 잠재적으로 DRY 원칙을 위반하는 것입니다.그러나 명령행에 파일의 이름을 전달하는 대신 파일을 mongo로 파이핑하는 것이 작동합니다.

mongo <file.js

언급URL : https://stackoverflow.com/questions/8565376/mongo-shell-script-wont-let-me-include-use-database

반응형