Robomongo를 사용하여 MongoDB에서 JSON을 내보내는 방법


108

그래서 나는에 대해 많이 모른다 MongoDB. 나는 한 RoboMongo나는 MongoDB를 연결하는 사용. 내가해야 할 일은 이것입니다. MongoDB에 컬렉션이 있습니다. 파일에 저장할 수 있도록 해당 컬렉션에서 데이터를 내보내고 싶습니다.

인터페이스를 사용하여 컬렉션의 데이터를 텍스트로 열고 Ctrl+ A를 수행하고 텍스트 파일에 붙여 넣었습니다. 그러나 모든 데이터가 복사되는 것은 아니며 자연스럽게 JSON을 깨뜨리는 텍스트 데이터에 많은 주석이 있다는 것을 알았습니다.

RoboMongo Export As JSON에 깨끗한 수출을 할 수 있는 시설 이 있는지 궁금합니다 .

모든 조언을 부탁드립니다!


특정 컬렉션이나 전체 DB를 내보내시겠습니까?
Ramesh Murugesan 2015

1
이것은 Robomongo의 현재 기능이 아니지만 github 문제 대기열에 Add JSON export 기능 제안을 추가했습니다 . 가져 오기 / 내보내기가 통합되어야 한다는 일반적인 제안이 있지만 더 자세하고 실용적인 사용 사례가 도움이 될 것입니다. 예를 들어 컬렉션, 찾기 쿼리, 집계 파이프 라인에서 JSON 내보내기를 지원해야합니까? 현재 가장 좋은 방법은 표준 mongoexport명령 줄 도구 를 사용하는 것 입니다.
Stennie 2015

1
@Stennie-귀하의 의견에 감사드립니다. 나는 귀하의 질문에 대한 대답으로 생각합니다. 고객 경험 관점에서 볼 때 실제로 중요하지 않습니다. 대부분의 다른 DB 인터페이스에서 흐름은 쿼리 (기준 포함 또는 제외)를 실행하고 결과 집합을 얻는 것입니다. 마우스 오른쪽 버튼을 클릭하고 "다음으로 결과 내보내기 ..."라고 말합니다. 여기에도 동일한 내용이 적용됩니다. 전체 컬렉션 또는 찾기 쿼리를 내보내는 경우 중요하지 않습니다. 결과가 패널에 표시 될 수 있으면 내보낼 수 있어야합니다.
정의되지 않은 변수

1
간단히 할 수 있습니다mongoexport --uri='mongodb://someUser@mongodb0.example.com:27017/marketing' --collection=contacts --out=contacts.json
Naren

답변:


63

MongoDB 셸 스크립트tojson 에서 각 레코드를 JSON으로 변환 하는 데 사용할 수 있습니다 .

RoboMongo에서이 스크립트를 실행합니다.

var cursor = db.getCollection('foo').find({}, {});
while(cursor.hasNext()) {
    print(tojson(cursor.next()))
}

이렇게하면 모든 결과가 JSON과 유사한 배열로 인쇄됩니다.

결과는 실제로 JSON이 아닙니다! 날짜 및 개체 ID와 같은 일부 유형은 JavaScript 함수 호출로 인쇄됩니다 (예 : ISODate("2016-03-03T12:15:49.996Z").

큰 결과 집합의 경우 그다지 효율적이지 않을 수 있지만 쿼리를 제한 할 수 있습니다. 또는 mongoexport.


3
유효한 json이 출력되지 않습니다. 그냥 JSON 직렬화 기록을 하나 하나
RUX

많은 사용 사례의 경우 tojson(db.getCollection(...).find(...)["_batch"])서버에서 얻은 현재 일괄 처리 전체를 출력하는 데 사용할 수 있습니다 .
Yuval

@Yuval 당신은 말 그대로 의미 ["_batch"]합니까? 이것을 사용하는 방법을 예를 들어 줄 수 있습니까? Robo 3T 1.2.1로 시도했지만 "스크립트가 성공적으로 실행되었지만 표시 할 결과가 없습니다"라고만 표시됩니다.
Florian Winter

7
@FlorianWinter 그건 그냥 돌아 다니면서 무작위로 발견 한 것입니다. 더 나은 솔루션은 tojson(db.getCollection(...).find(...).toArray()).
Yuval

@Yuval 좋네요! 이것이 가장 쉬운 해결책입니다. 저보다 훨씬 낫습니다. 답변으로 게시하는 것을 고려하십시오. (또는 편집 광산,하지만 난 ... 당신이 다소 불공평 것이다, 자격이있는 모든 신용을 얻을 것입니다)
플로리안 겨울을

58

빠르고 더러운 방법 : 쿼리를 다음 db.getCollection('collection').find({}).toArray()과 같이 작성하고을 마우스 오른쪽 버튼으로 클릭하십시오 Copy JSON. 원하는 편집기에 데이터를 붙여 넣습니다.

여기에 이미지 설명 입력


4
산뜻한! robo3t의 내보내기 기능 부족을 고려하면 전혀 더럽지 않습니다. 다른 제안 된 솔루션에 비해 작은 데이터 세트의 경우 훨씬 쉽습니다.
Ilya Luzyanin

30

Robomongo의 셸 기능이 문제를 해결합니다. 제 경우에는 CSV 형식으로 몇 개의 열이 필요했습니다.

var cursor = db.getCollection('Member_details').find({Category: 'CUST'},{CustomerId :1,Name :1,_id:0})

while (cursor.hasNext()) {
    var record = cursor.next();   
    print(record.CustomerID + "," + record.Name)
}

Output : -------

334, Harison
433, Rechard
453, Michel
533, Pal

1
이 스크립트의 출력을 Robomongo 셸에서 로컬로 csv에 쓸 수 있습니까?
xxxvincxxx

이 날은 "스크립트가 성공적으로 실행하지만, 쇼 결과가 없습니다"제공
Shanika Ediriweera

오류 : 행 10 : 잘못된 대입의 측면 손 왼쪽
오이겐 선익

19

MongoDB GUI가 몇 개 있으며, 그중 일부는 데이터 내보내기를 기본적으로 지원합니다. http://mongodb-tools.com 에서 MongoDB GUI의 포괄적 인 목록을 찾을 수 있습니다 .

전체 컬렉션 내보내기가 아니라 쿼리 결과 내보내기에 대해 질문했습니다. 부여 3T MongoChef MongoDB를 GUI를 시도,이 도구는 특정 사용 케이스에 대한 지원을하고있다.


Studio 3T는 예상보다 작업을 완전히 쉽게 수행했습니다! : +1 :
vinyll

16

스프레드 시트에서와 같이 "파일로 내보내기"라고 말합니까? .csv를 좋아하십니까?

IMO는 Robo 3T (이전의 robomongo)에서이 작업을 수행하는 가장 쉬운 방법입니다.

  1. Robo 3T GUI의 오른쪽 상단에 "텍스트 모드에서 결과보기"버튼이 있습니다.이 버튼을 클릭하고 모든 항목을 복사합니다.

  2. 이 웹 사이트에 모든 것을 붙여 넣으십시오 : https://json-csv.com/

  3. 다운로드 버튼을 클릭하면 이제 스프레드 시트에 있습니다.

Robo 3T에 수출 기능이 있기를 바랍니다.


매우 간단합니다. 감사합니다
Tính Ngô Quang

11

셸에서이 명령을 실행하지 말고 데이터베이스 이름, 컬렉션 이름 및 파일 이름을 사용하여 명령 프롬프트에이 스크립트를 입력하십시오. 모두 자리 표시자를 대체합니다.

mongoexport --db (Database name) --collection (Collection Name) --out (File name).json

그것은 나를 위해 작동합니다.



5

Anish의 답변을 확장하면서, 모든 필드를 자동으로 출력하기 위해 모든 필드를 자동으로 출력하는 대신 print 문 내에서 정의해야하는 모든 쿼리에 적용 할 수있는 기능을 원했습니다. 아마도 단순화 될 수 있지만 이것은 훌륭하게 작동하는 빠르고 더러운 것입니다.

var cursor = db.getCollection('foo').find({}, {bar: 1, baz: 1, created_at: 1, updated_at: 1}).sort({created_at: -1, updated_at: -1});

while (cursor.hasNext()) {
    var record = cursor.next();
    var output = "";
    for (var i in record) {
      output += record[i] + ",";
    };
    output = output.substring(0, output.length - 1);
    print(output);
}


2

robomongo 셸 스크립트 사용 :

//on the same db
var cursor = db.collectionname.find();

while (cursor.hasNext()) {
    var record = cursor.next();   
    db.new_collectionname.save(record);
}

mongodb의 내보내기 및 가져 오기 명령 사용

명령에 --jsonArray매개 변수 / 플래그를 추가하면 mongoexport결과가 단일 json 배열로 내보내집니다.

그런 다음 --jsonArray가져올 때 플래그를 다시 지정하십시오 .

또는 파일에서 시작 및 끝 배열 대괄호 []를 제거하면 수정 및 내 보낸 파일이 플래그 mongoimport없이 명령 과 함께 가져옵니다 --jsonArray.

내보내기에 대한 자세한 내용 : https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

여기에서 가져 오기 : https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray


1

나는 이와 동일한 문제가 있었고 robomongo (Robo 3T 1.1.1)에서 스크립트를 실행해도 값 복사가 허용되지 않으며 내보내기 옵션도 없었습니다. 이 작업을 수행 할 수있는 가장 좋은 방법은 mongoexport를 사용하는 것입니다. mongodb가 로컬에 설치되어 있으면 mongoexport를 사용하여 모든 서버의 데이터베이스에 연결하고 데이터를 추출 할 수 있습니다.

원격 서버의 데이터 및 csv 출력 파일에 연결하려면 명령 줄에서 다음 mongoexport를 실행합니다.

mongoexport --host HOSTNAME --port PORT --username USERNAME --password "PASSWORD" --collection COLLECTION_NAME --db DATABASE_NAME --out OUTPUTFILE.csv --type=csv --fieldFile fields.txt

fieldFile : 원하는 열을 추출하는 데 도움이됩니다. 예 : fields.txt의 내용은 다음과 같을 수 있습니다.

userId

'userId'열의 값만 추출합니다.

원격 서버의 데이터, json 출력 파일 :

mongoexport --host HOST_NAME --port PORT --username USERNAME --password "PASSWORD" --collection COLECTION_NAME --db DATABASE_NAME --out OUTPUT.json

이것은 모든 필드를 json 파일로 추출합니다.

localhost의 데이터 (mongodb는 localhost에서 실행되어야 함)

mongoexport --db DATABASE_NAME --collection COLLECTION --out OUTPUT.json

참조 : https://docs.mongodb.com/manual/reference/program/mongoexport/#use


1

해결책:

mongoexport --db test --collection traffic --out traffic.json<br><br>

여기에 이미지 설명 입력

어디에 :
데이터베이스-> 모의 서버
컬렉션 이름-> api_defs
출력 파일 이름-> childChoreRequest.json


1

쿼리를 실행할 준비가 된 사용자를위한 Florian Winter 답변 의 확장 입니다.

dropinsertMany사용하여 쿼리 cursor:

{
    // collection name
    var collection_name = 'foo';

    // query
    var cursor = db.getCollection(collection_name).find({});

    // drop collection and insert script
    print('db.' + collection_name + '.drop();');
    print('db.' + collection_name + '.insertMany([');

    // print documents
    while(cursor.hasNext()) {
        print(tojson(cursor.next()));

        if (cursor.hasNext()) // add trailing "," if not last item
            print(',');
    }

    // end script
    print(']);');
}

출력은 다음과 같습니다.

db.foo.drop();
db.foo.insertMany([
{
    "_id" : ObjectId("abc"),
    "name" : "foo"
}
,
{
    "_id" : ObjectId("xyz"),
    "name" : "bar"
}
]);

0
  1. 당신의 검색을
  2. JSON 모드의 푸시 버튼보기 결과
  3. 결과를 단어로 복사
  4. 단어에서 결과를 인쇄

내 문서에 날짜가 있으면 유효한 json 형식이 아닌 ISODate 요소를 반환합니다.
Constantino Cronemberger

1
Word 문서를 사용하여 데이터베이스 내보내기를 저장하는 이유는 무엇입니까? 그리고 왜 세계에서 데이터베이스 내보내기를 인쇄하려는 사람이 있습니까?
매스크

@maesk 🤣🤣🤣🤣
Charlie Schliesser
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.