[javascript] MongoDB 셸 출력을 파일로 ‘예쁘게’인쇄하는 방법이 있습니까?

특히 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.jsDBQuery.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였습니다.