sourcetip

MongoDB 쉘 출력을 파일로 '예쁘게' 인쇄할 수 있는 방법이 있습니까?

fileupload 2023. 3. 29. 21:45
반응형

MongoDB 쉘 출력을 파일로 '예쁘게' 인쇄할 수 있는 방법이 있습니까?

의 결과를 하고 싶습니다.find()파일로 변환합니다.JSON 개체가 너무 커서 셸 창 크기로 개체 전체를 볼 수 없습니다.

이 셸은 인터랙티브한 환경이기 때문에 훌륭하지만 숨겨진 기능을 제공합니다.

javascript 파일에서 mongo commands.js를 사용하여 명령을 실행하면 완전히 동일한 동작을 얻을 수 없습니다.

여기에는 두 가지 방법이 있습니다.

(1) 셸을 조작하여 인터랙티브 모드인 것처럼 보이게 한다.

$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF

or or or openicle.
) 하여 (2) Javascript의 find()한 JSON으로 합니다.

mongo dbname command.js > output.json

여기서 command.timeout에는 다음(또는 이에 상당하는 것)이 포함됩니다.

printjson( db.collection.find().toArray() )

이렇게 하면 다음과 같은 일련의 결과가 인쇄됩니다.[ ] 않으면 - 를 할 수 .printjson()각 요소

참고로, Javascript 스테이트먼트를 1개만 실행하고 있다면 파일에 넣을 필요가 없고 대신 다음과 같이 사용할 수 있습니다.

$ 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

쿼리 결과는 'output' 파일에 있습니다.파일'을 클릭합니다.

디폴트로는 Mongo는 첫 20개의 문서 IIRC를 출력합니다.더 필요한 경우 Mongo 쉘에서 배치 크기에 대한 새로운 값을 정의할 수 있습니다.

DBQuery.shellBatchSize = 100.

「」를 사용합니다.print ★★★★★★★★★★★★★★★★★」JSON.stringify당신은 단지 유효한 을 만들 수 있다. JSON★★★★★★ 。
--quiet출력에서 셸 노이즈를 필터링하려면 flag를 사용합니다.
--norc .mongorc.js평가하기.(사용하고 있는 예쁜 포맷으로 인해 유효하지 않은 JSON 출력이 생성되었기 때문에 이 작업을 수행해야 했습니다.)사용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()
);

이게 도움이 됐으면 좋겠네요!

write File() 함수로 결과를 저장했습니다.

> writeFile("/home/pahan/output.txt", tojson(db.myCollection.find().toArray()))

Mongo 쉘 버전은 4.0.9였습니다.

새로운 mongodb 쉘 5.0+ mongosh에서는 Node.js fs 모듈을 내장하고 있기 때문에 새로운 mongosh 쉘에서는 출력을 예쁘게 인쇄할 수 있습니다.

fs.writeFileSync('output.json', JSON.stringify(db.test.find().toArray(), null, 2))

다음과 같은 문제 없이ObjectId벗겨진 것 등이며, 이것은 더 나은 것입니다.printjson또는.pretty().

상기의 코드는, 다음과 같이 동작합니다.

MongoDB 쉘(mongosh)은 MongoDB 도입과 상호 작용하기 위한 완전히 기능하는 JavaScript 및 Node.js 14.x REP 환경입니다.MongoDB 쉘을 사용하여 데이터베이스와 직접 쿼리 및 작업을 테스트할 수 있습니다.

옛것mongoLegacy 로도 표시되어 있기 때문에, 이 새로운 방법으로 이행할 필요가 있습니다.

Asya Kamsky의 답변을 사용하여 Windows용 한 줄 배트 스크립트를 작성했습니다.선은 다음과 같습니다.

mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json

다음으로 실행할 수 있습니다.

exportToJson.bat DbName CollectionName

또한 mongo export도 있습니다만, 어떤 버전부터 사용할 수 있는지 모르겠습니다.

예:

mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json

Neodan mongoexport의 답변은 다음과 같이 매우 유용합니다.-q옵션을 지정합니다.변환도 가능합니다.ObjectIdJSON의 표준 포맷에 준거"$oid"예:

mongoexport -d yourdb -c yourcol --jsonArray --pretty -q '{"field": "filter value"}' -o output.json

이 명령어를 사용하여 실행할 수 있습니다.

mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json

언급URL : https://stackoverflow.com/questions/13104800/is-there-a-way-to-pretty-print-mongodb-shell-output-to-a-file

반응형