Mongo 셸에서 Mongo 쿼리 출력을 파일로 인쇄하는 중
Mongo와 함께 2일 동안 일했고 SQL 경력이 있으니 조금만 참아주세요.mysql과 마찬가지로 MySQL 명령줄에서 쿼리 결과를 기계상의 파일로 출력하는 것이 매우 편리합니다.나는 어떻게 내가 껍질 속에 있으면서 몽고와 같은 일을 할 수 있는지 이해하려고 한다.
셸 외부에서 다음 명령을 실행하면 원하는 쿼리의 출력을 쉽게 얻을 수 있습니다.
mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" > sample.json
위의 방법은 괜찮지만 이 명령을 실행하려면 mongo 셸을 종료하거나 새 터미널 탭을 열어야 합니다.셸 안에 있으면서 간단하게 할 수 있으면 편리합니다.
추신: 질문은 제가 SO에 올린 질문의 일부입니다.
AFAIK, 출력에 대한 대화식 옵션은 없습니다. 이 문제와 관련된 이전 SO 질문이 있습니다: mongodb 쉘 출력을 파일로 인쇄하는 중
단, tee 명령어로 셸을 호출한 경우에는 모든 셸 세션을 기록할 수 있습니다.
$ mongo | tee file.txt
MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye
그러면 다음 내용을 포함하는 파일을 얻을 수 있습니다.
MongoDB shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye
모든 명령을 제거하고 json 출력만 유지하려면 다음과 같은 명령을 사용할 수 있습니다.
tail -n +3 file.txt | egrep -v "^>|^bye" > output.json
그러면 다음과 같은 이점이 있습니다.
{ "this" : "is a test" }
{ "this" : "is another test" }
이렇게 할 수 있어요
mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000).toArray()' > users.json
그shellBatchSize
인수는 mongo 클라이언트가 인쇄할 수 있는 행 수를 결정하기 위해 사용합니다.기본값은 20 입니다.
script-file, db address 및 --quiet 인수를 사용하여 셸을 호출하면 출력(예를 들어 print()으로 작성)을 파일로 리다이렉트 할 수 있습니다.
mongo localhost/mydatabase --quiet myScriptFile.js > output
CLI를 종료하지 않고 파이프로 접속할 수 있는 방법이 있습니다.mongo
출력할 수 있습니다.
조회 출력을 결과와 함께 저장하려면 다음과 같이 하십시오.x
json 출력을 직접 저장하기 위해 다음을 수행할 수 있습니다./tmp/x.json
:
> EDITOR="cat > /tmp/x.json"
> x = db.MyCollection.find(...).toArray()
> edit x
>
출력은 엄밀하게 Json이 아니라 Mongo가 사용하는 사투리입니다.
새로운 mongodb 쉘 5.0+ mongosh에서는 Node.js fs 모듈을 통합하므로 새로운 mongosh 쉘에서는 다음과 같이 간단히 수행할 수 있습니다.
fs.writeFileSync('output.json', JSON.stringify(db.collectionName.findOne()))
이것에 의해, 다음과 같은 문제도 회피됩니다.ObjectId(...)
에 포함되다tojson
유효한 JSON 문자열이 아닙니다.
위의 코드는 다음 설명에 따라 작동합니다.
MongoDB 쉘(mongosh)은 MongoDB 도입과 상호 작용하기 위한 완전히 기능하는 JavaScript 및 Node.js 14.x REP 환경입니다.MongoDB 쉘을 사용하여 데이터베이스와 직접 쿼리 및 작업을 테스트할 수 있습니다.
이전 쉘은 이미 레거시 마크가 붙어 있으므로 가능하면 mongosh를 사용하십시오.
표시되는 결과의 수를 늘리는 것이 도움이 될 수 있습니다.
쉘 내 > mongo » >
DBQuery.shellBatchSize = 3000
단말기에서 모든 결과를 한 번에 선택하여 텍스트 파일에 붙여넣을 수 있습니다.
이것이 내가 할 일이다:)
(출처 : https://stackoverflow.com/a/3705615/1290746)
몇 가지 조건의 조합:
- JS 파일에 mongo 쿼리를 작성하여 단말기에서 보냅니다.
- 프로그래밍 방식으로 데이터베이스를 전환/변환하다
- 발견된 모든 레코드 출력
- 초기 출력 라인 절단
- 출력을 JSON 파일에 저장하다
myScriptFile.js
// Switch current database to "mydatabase"
db = db.getSiblingDB('mydatabase');
// The mark for cutting initial output off
print("CUT_TO_HERE");
// Main output
// "toArray()" method allows to get all records
printjson( db.getCollection('jobs').find().toArray() );
터미널에서 쿼리 전송
-z
의 의 키sed
할 수 .
$>mongo localhost --quiet myScriptFile.js | sed -z 's/^.*CUT_TO_HERE\n//' > output.json
언급URL : https://stackoverflow.com/questions/22565231/printing-mongo-query-output-to-a-file-while-in-the-mongo-shell
'programing' 카테고리의 다른 글
Fetch Response 개체에서 텍스트 가져오기 (0) | 2023.03.13 |
---|---|
Spring WebFlux에서 요청 및 응답 본문을 기록하는 방법 (0) | 2023.03.13 |
루트가 변경되면 Angular UI Bootstrap Modal을 자동으로 닫는 방법이 있나요? (0) | 2023.03.08 |
Reference Loop Handling이란?뉴턴소프트에서 무시한다고요? (0) | 2023.03.08 |
createspy와 createspyobj의 차이점은 무엇입니까? (0) | 2023.03.08 |