Robomongoを使用してMongoDBからJSONをエクスポートする方法


108

だから私はあまり知りませんMongoDB。私はRoboMongoMongoDBに接続するために使用しています。私がする必要があるのはこれです-そのMongoDBにはコレクションがあります。そのコレクションからデータをエクスポートして、ファイルに保存できるようにしたいと考えています。

インターフェースを使用して、コレクションからのデータをテキストとして開き、Ctrl+ Aを実行してテキストファイルに貼り付けました。ただし、すべてのデータがコピーされるわけではなく、JSONを自然に壊すコメントがテキストデータに多数あることがわかりました。

RoboMongoにExport As JSONクリーンエクスポートを実行できる機能があるかどうか疑問に思っています。

どんなポインタでも大歓迎です!


特定のコレクションまたは完全なデータベースをエクスポートしますか?
Ramesh Murugesan、2015

1
これはRobomongoの現在の機能ではありませんが、Githubの問題キューに機能の提案を追加しました。JSONエクスポートを追加しますインポート/エクスポートを統合する必要があるという一般的な提案がありますが、より詳細で実用的なユースケースが役立つでしょう。たとえば、これはコレクション、検索クエリ、集計パイプラインからのJSONのエクスポートをサポートする必要がありますか?現在、最良のオプションは、標準のmongoexportコマンドラインツールを使用することです。
Stennie、2015

1
@Stennie-コメントありがとうございます。私はあなたの質問に答えると思います-カスタマーエクスペリエンスの観点からは、それは本当に重要ではありません。他のほとんどのDBインターフェースでは、フローは、(基準の有無にかかわらず)クエリを実行し、一連の結果を取得することです。右クリックして「結果を次の形式でエクスポート...」と言うと、ここでも同じことが当てはまります。コレクション全体をエクスポートするか、検索クエリをエクスポートするかは関係ありません。結果がパネルに表示される場合は、エクスポート可能である必要があります。
未定義の変数

1
単純にこれを行うことができますmongoexport --uri='mongodb://someUser@mongodb0.example.com:27017/marketing' --collection=contacts --out=contacts.json
Naren

回答:


63

を使用tojsonして、MongoDBシェルスクリプトで各レコードを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でシリアル化されたレコードを1つずつ
ruX

多くのユースケースでは、を使用tojson(db.getCollection(...).find(...)["_batch"])して、サーバーから取得した現在のバッチ全体を出力できます。
ユヴァル2018

@ユヴァルあなたは文字通りの意味["_batch"]ですか?これを使用する方法の例を挙げられますか?Robo 3T 1.2.1でこれを試しましたが、「スクリプトは正常に実行されましたが、表示する結果がありません」とだけ表示されています。
フロリアン冬

7
@FlorianWinterそれは、いじくり回してのランダムな発見からのものでした。より良い解決策はtojson(db.getCollection(...).find(...).toArray())です。
ユヴァル2018

@ユヴァルニース!それが私の最も簡単な解決策です。回答として投稿することを検討してください。(または私のものを編集しますが、それならあなたに値するすべてのクレジットを取得しますが、これは多少不公平です...)
Florian Winter

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

エラー:10行目:割り当ての左側が無効です
Eugen Sunic

19

MongoDBのGUIはいくつかありますが、そのうちのいくつかはデータエクスポートのサポートが組み込まれています。あなたはでのMongoDBのGUIの包括的なリストを見つけることができますhttp://mongodb-tools.com

コレクション全体のエクスポートではなく、クエリの結果のエクスポートについて質問しました。与える3T MongoChef MongoDBのGUIに試して、このツールは、特定のユースケースをサポートしています。


Studio 3Tは、予想以上に簡単に作業を行いました :+1:
Vinyll 2018

16

スプレッドシートのように「ファイルにエクスポート」と言いますか?.csvは好きですか?

IMOこれは、Robo 3T(以前のrobomongo)でこれを行う最も簡単な方法です。

  1. Robo 3T GUIの右上に「テキストモードで結果を表示」ボタンがあり、それをクリックしてすべてをコピーします。

  2. すべてをこのウェブサイトに貼り付けます:https : //json-csv.com/

  3. ダウンロードボタンをクリックすると、スプレッドシートに表示されます。

Robo 3Tにエクスポート機能があったらいいので、これが誰かの役に立つことを願っています


非常にシンプルな、ありがとう
TínhNGOクアン

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);
}

4

mongoimportを使用する場合は、次のようにエクスポートする必要があります。

db.getCollection('tables')
  .find({_id: 'q3hrnnoKu2mnCL7kE'})
  .forEach(function(x){printjsononeline(x)});

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の内容は次のようになります。

ユーザーID

列 '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 Answer の拡張。

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

@maesk🤣🤣🤣🤣
チャーリーSchliesser
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.