답변:
쉘은 대화 형 환경이기 때문에 멋지지만 숨겨진 기능을 제공합니다.
mongo commands.js를 통해 자바 스크립트 파일에서 명령을 실행할 때 완전히 동일한 동작을 얻지 못할 것입니다.
이 문제에는 두 가지 방법이 있습니다.
(1) 셸을 가짜로 만들고 대화 형 모드라고 생각하게 만듭니다.
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
또는
(2) Javascript를 사용하여 결과를 find()
인쇄 가능한 JSON으로 변환
mongo dbname command.js > output.json
여기서 command.js에는 다음이 포함됩니다 (또는 이에 상응하는 항목) :
printjson( db.collection.find().toArray() )
이것은 [ ]
배열과 printjson()
각 요소를 반복 할 수있는 것을 원하지 않는 경우를 포함하여 결과 배열을 예쁘게 인쇄합니다 .
그건 그렇고, 하나의 Javascript 문만 실행하는 경우 파일에 넣을 필요가 없으며 대신 다음을 사용할 수 있습니다.
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt
했지만 나에게 주었다 JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
.
실행하려는 명령을 파일에 넣은 다음 데이터베이스 이름과 함께 셸에 전달하고 출력을 파일로 리디렉션하십시오. 따라서 find 명령이에 find.js
있고 데이터베이스가 foo
인 경우 다음과 같습니다.
./mongo foo find.js >> out.json
out.json
. mongo foo < find.js > out.json
일했다.
쿼리 (예 db.someCollection.find().pretty()
:)를 javascript 파일에 넣습니다 query.js
. 그런 다음 다음 명령을 사용하여 운영 체제의 셸에서 실행합니다.
mongo yourDb < query.js > outputFile
쿼리 결과는 'outputFile'이라는 파일에 있습니다.
기본적으로 Mongo는 처음 20 개의 문서 IIRC를 인쇄합니다. 더 많은 것을 원한다면 Mongo 셸에서 배치 크기에 새 값을 정의 할 수 있습니다.
DBQuery.shellBatchSize = 100
.
.js
연장 으로 오해하지 마십시오 . 전혀 변경하지 않고 모든 멋진 mongo 쉘 쿼리를 작성할 수 있습니다.
사용 print
하고 JSON.stringify
당신은 간단하게 생성 할 수 있습니다 유효한 JSON
결과를. 플래그를
사용 --quiet
하여 출력에서 쉘 노이즈를 필터링합니다. 평가 를 피하기 위해 플래그를
사용하십시오 . (내가 사용하는 예쁜 포맷터 때문에 잘못된 JSON 출력 이 생성되기 때문에해야했습니다 .) 페이징을 피하기 위해 실제 결과의 한계로 바꾸는 것을 사용하십시오 .--norc
.mongorc.js
DBQuery.shellBatchSize = ?
?
마지막으로 tee
터미널 출력을 파일로 파이프하는 데 사용 합니다.
// Shell:
mongo --quiet --norc ./query.js | tee ~/my_output.json
// query.js:
DBQuery.shellBatchSize = 2000;
function toPrint(data) {
print(JSON.stringify(data, null, 2));
}
toPrint(
db.getCollection('myCollection').find().toArray()
);
도움이 되었기를 바랍니다!
또한 mongoexport가 있습니다 가 있지만 어떤 버전을 사용할 수 있는지 확실하지 않습니다.
예:
mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json
이 명령을 사용하여 얻을 수 있습니다.
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json