だから私はMongoDB
についてあまり知りません。私はRoboMongo
を使ってMongoDBに接続します。私がする必要があるのはこれです - そのMongoDBにコレクションがあります。ファイルに保存できるように、そのコレクションからデータをエクスポートしたいと思います。
私はインターフェースを使ってコレクションからのデータをテキストとして開き、CTRL + A
をしてテキストファイルに貼り付けました。しかし、すべてのデータがコピーされているわけではなく、テキストデータにはJSONを自然に破壊する多くのコメントがあることもわかりました。
RoboMongoにクリーンなエクスポートができるようにExport As JSON
機能があるかどうか疑問に思います。
どんなポインタでも大歓迎です!
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
を使用することもできます。
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
そこにはいくつかのMongoDB GUIがあり、そのうちのいくつかはデータエクスポートのための組み込みサポートを持っています。 MongoDBのGUIの包括的なリストは http://mongodb-tools.com にあります。
コレクション全体をエクスポートするのではなく、クエリの結果をエクスポートすることについて質問しました。 Give T MongoChef MongoDB GUI 試してみて、このツールはあなたの特定のユースケースをサポートします。
シェルでこのコマンドを実行しないでください。データベース名、コレクション名、およびファイル名を指定してコマンドプロンプトでこのスクリプトを入力します。すべてプレースホルダが置き換えられます。
mongoexport --db (Database name) --collection (Collection Name) --out (File name).json
わたしにはできる。
スプレッドシートのように「ファイルにエクスポート」と言いますか。 .csvが好きですか?
IMOこれはRobo 3T(以前のrobomongo)でこれを行う最も簡単な方法です。
Robo 3T GUIの右上には、「結果をテキストモードで表示」ボタンがあります。それをクリックして、すべてをコピーします。
すべてこのウェブサイトに貼り付けてください。 https://json-csv.com/
ダウンロードボタンをクリックすると、スプレッドシートに表示されます。
robo 3Tにエクスポート機能があることを願います。
Robomongoにはそのような機能はないと思います。そのため、特定のCollectionのmongoexportとしてmongodb関数を使用することをお勧めします。
http://docs.mongodb.org/manual/reference/program/mongoexport/#export-in-json-format
あなたがバックアップソリューションを探しているのであればしかし、使用することをお勧めします
mongodump / mongorestore
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);
}
mongoimport を使いたい場合は、次のようにエクスポートします。
db.getCollection('tables')
.find({_id: 'q3hrnnoKu2mnCL7kE'})
.forEach(function(x){printjsononeline(x)});
//on the same db
var cursor = db.collectionname.find();
while (cursor.hasNext()) {
var record = cursor.next();
db.new_collectionname.save(record);
}
mongoexport
コマンドに--jsonArray
パラメータ/フラグを追加すると、結果が単一のjson配列としてエクスポートされます。
その後、インポート時に--jsonArray
フラグをもう一度指定するだけです。
または、ファイル内の最初と最後の配列括弧[]を削除すると、変更後のエクスポートされたファイルは--jsonArray
フラグなしでmongoimport
コマンドでインポートされます。
ここでエクスポートの詳細: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray
ここにインポート: https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray
私はこれと同じ問題を抱えていたし、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