특히 mongodb의 결과를 find()
파일 로 인쇄하고 싶습니다 . JSON 개체가 너무 커서 셸 창 크기로 전체 개체를 볼 수 없습니다.
답변
쉘은 대화 형 환경이기 때문에 멋지지만 숨겨진 기능을 제공합니다.
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 | tee somefile
세션을 정상적으로 사용 db.collection.find().pretty()
하거나 필요한 작업을 수행하고 긴 출력을 무시하고 종료하십시오. 세션 기록은 작성된 파일 tee
에 있습니다.
mongo 셸이 대화 형 세션을 예상하기 때문에 출력에 이스케이프 시퀀스 및 기타 쓰레기가 포함될 수 있습니다. less
우아하게 처리합니다.
답변
실행하려는 명령을 파일에 넣은 다음 데이터베이스 이름과 함께 셸에 전달하고 출력을 파일로 리디렉션하십시오. 따라서 find 명령이에 find.js
있고 데이터베이스가 foo
인 경우 다음과 같습니다.
./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
.
답변
사용 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()
);
도움이 되었기를 바랍니다!
답변
Asya Kamsky 의이 답변 을 사용하여 Windows 용 한 줄 박쥐 스크립트를 작성했습니다. 라인은 다음과 같습니다.
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
그런 다음 실행할 수 있습니다.
exportToJson.bat DbName CollectionName
답변
writeFile () 함수로 결과를 저장했습니다 .
> writeFile("/home/pahan/output.txt", tojson(db.myCollection.find().toArray()))
Mongo 셸 버전은 4.0.9였습니다.