Cara mengekspor JSON dari MongoDB menggunakan Robomongo

108

Jadi saya tidak tahu banyak tentang MongoDB. Saya telah RoboMongomenggunakan yang saya sambungkan ke MongoDB. Yang perlu saya lakukan adalah ini - ada koleksi di MongoDB itu. Saya ingin mengekspor data dari koleksi itu sehingga saya bisa menyimpannya ke dalam sebuah file.

Saya menggunakan antarmuka untuk membuka data dari koleksi sebagai teks dan melakukan Ctrl+ Adan ditempelkan ke dalam file teks. Namun, saya menemukan bahwa tidak semua data disalin dan juga ada banyak komentar di data teks yang secara alami merusak JSON.

Saya ingin tahu apakah RoboMongo memiliki Export As JSONfasilitas sehingga saya dapat melakukan ekspor bersih.

Setiap petunjuk dihargai!

Variabel Tak Terdefinisi
sumber
Anda ingin mengekspor koleksi tertentu atau db penuh?
Ramesh Murugesan
1
Ini bukan fitur Robomongo saat ini, tetapi saya telah menambahkan saran fitur di antrean masalah github: Tambahkan ekspor JSON . Ada saran umum bahwa impor / ekspor harus diintegrasikan , tetapi kasus penggunaan yang lebih rinci / praktis akan membantu. Misalnya, apakah ini harus mendukung mengekspor JSON dari koleksi, kueri pencarian, pipeline agregasi? Saat ini, opsi terbaik Anda adalah menggunakan mongoexportalat baris perintah standar .
Stennie
1
@Stennie - terima kasih atas komentar Anda. Saya kira sebagai jawaban atas pertanyaan Anda - dari sudut pandang pengalaman pelanggan, itu tidak terlalu penting. Di sebagian besar antarmuka DB lainnya, alurnya adalah Anda menjalankan kueri (dengan atau tanpa kriteria), mendapatkan sekumpulan hasil. Klik kanan dan katakan "ekspor hasil sebagai ..." Jadi hal yang sama harus diterapkan di sini. Tidak masalah jika saya mengekspor seluruh koleksi atau kueri pencarian. Jika hasilnya bisa ditampilkan di panel, maka itu harus bisa diekspor.
Variabel Tak
1
Cukup Anda dapat melakukan inimongoexport --uri='mongodb://[email protected]:27017/marketing' --collection=contacts --out=contacts.json
Naren

Jawaban:

64

Anda dapat menggunakan tojsonuntuk mengonversi setiap catatan ke JSON dalam skrip shell MongoDB .

Jalankan skrip ini di RoboMongo:

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

Ini mencetak semua hasil sebagai larik mirip JSON.

Hasilnya sebenarnya bukan JSON! Beberapa tipe, seperti tanggal dan ID objek, dicetak sebagai pemanggilan fungsi JavaScript, mis ISODate("2016-03-03T12:15:49.996Z"). , .

Mungkin tidak terlalu efisien untuk kumpulan hasil yang besar, tetapi Anda bisa membatasi kueri. Atau, Anda bisa menggunakan mongoexport.

Florian Winter
sumber
3
Ini mengeluarkan json yang tidak valid. Hanya catatan berseri json satu per satu
ruX
Untuk banyak kasus penggunaan, seseorang dapat menggunakan tojson(db.getCollection(...).find(...)["_batch"])untuk mengeluarkan keseluruhan batch saat ini yang diperoleh dari server.
Yuval
@Yuval Maksud Anda secara harfiah ["_batch"]? Bisakah Anda memberi contoh bagaimana menggunakan ini? Saya mencoba ini dengan Robo 3T 1.2.1, tetapi hanya mengatakan "Skrip berhasil dieksekusi, tetapi tidak ada hasil untuk ditampilkan".
Florian Winter
7
@FlorianWinter Itu hanya dari penemuan acak dari bermain-main. Solusi yang lebih baik adalah tojson(db.getCollection(...).find(...).toArray()).
Yuval
@Yuval Bagus! Itu adalah solusi termudah, jauh lebih baik dari saya. Pertimbangkan untuk mempostingnya sebagai jawaban. (Atau edit milik saya, tapi kemudian saya akan mendapatkan semua pujian yang layak Anda dapatkan, yang akan menjadi agak tidak adil ...)
Florian Winter
59

Cara yang cepat dan kotor: Cukup tulis kueri Anda sebagai db.getCollection('collection').find({}).toArray()dan klik kanan Copy JSON. Tempel data di editor pilihan Anda.

masukkan deskripsi gambar di sini

öbl
sumber
4
Rapi! Tidak kotor sama sekali mengingat kurangnya fungsi ekspor di robo3t. Jauh lebih mudah untuk kumpulan data kecil dibandingkan dengan solusi lain yang disarankan.
Ilya Luzyanin
30

Fungsionalitas shell Robomongo akan menyelesaikan masalah. Dalam kasus saya, saya membutuhkan beberapa kolom sebagai format 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
Anish Abraham
sumber
1
Apakah mungkin untuk menulis keluaran dari skrip ini ke dalam csv secara lokal di dalam shell Robomongo?
xxxvincxxx
Ini memberi saya "Skrip berhasil dieksekusi, tetapi tidak ada hasil untuk ditampilkan"
Shanika Ediriweera
Kesalahan: Baris 10: Sisi kiri tidak valid dalam penugasan
Eugen Sunic
19

Ada beberapa GUI MongoDB di luar sana, beberapa di antaranya memiliki dukungan bawaan untuk mengekspor data. Anda akan menemukan daftar lengkap GUI MongoDB di http://mongodb-tools.com

Anda telah bertanya tentang mengekspor hasil kueri Anda, dan bukan tentang mengekspor seluruh koleksi. Berikan 3T MongoChef MongoDB GUI dicoba, alat ini memiliki dukungan untuk kasus penggunaan khusus Anda.

Tomek
sumber
Studio 3T benar-benar melakukan pekerjaan itu lebih mudah dari yang diharapkan! : +1:
vinyll
16

Anda mengatakan "ekspor ke file" seperti di spreadsheet? suka dengan .csv?

IMO ini adalah cara termudah untuk melakukan ini di Robo 3T (sebelumnya robomongo):

  1. Di kanan atas GUI Robo 3T ada tombol "Lihat Hasil dalam mode teks", klik dan salin semuanya

  2. tempel semuanya ke situs web ini: https://json-csv.com/

  3. klik tombol unduh dan sekarang Anda memilikinya di spreadsheet.

Semoga ini membantu seseorang, karena saya berharap Robo 3T memiliki kemampuan ekspor

russiansummer
sumber
Sangat sederhana, terima kasih
Tính Ngô Quang
11

Jangan menjalankan perintah ini pada shell, masukkan skrip ini pada prompt perintah dengan nama database Anda, nama koleksi, dan nama file, semua menggantikan placeholder ..

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

Ini bekerja untuk saya.

Yogesh Nikam Patil
sumber
5

Memperluas jawaban Anish, saya menginginkan sesuatu yang dapat saya terapkan pada kueri apa pun untuk secara otomatis menampilkan semua bidang vs. harus menentukannya dalam pernyataan cetak. Ini mungkin dapat disederhanakan tetapi ini adalah sesuatu yang cepat & kotor yang bekerja dengan baik:

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);
}
Mark Shust di M.academy
sumber
4

Jika Anda ingin menggunakan mongoimport , Anda ingin mengekspor dengan cara ini:

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

Menggunakan skrip shell robomongo:

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

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

Menggunakan perintah ekspor dan impor mongodb

Anda dapat menambahkan --jsonArrayparameter / bendera ke mongoexportperintah Anda , ini mengekspor hasilnya sebagai larik json tunggal.

Kemudian tentukan --jsonArraylagi bendera tersebut saat mengimpor.

Atau hapus tanda kurung siku awal dan akhir [] di file, lalu file yang dimodifikasi & diekspor akan diimpor dengan mongoimportperintah tanpa --jsonArraybendera.

Lebih lanjut tentang Ekspor di sini: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

Impor di sini: https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray

Herald Smit
sumber
1

Saya mengalami masalah yang sama, dan menjalankan skrip di robomongo (Robo 3T 1.1.1) juga tidak memungkinkan untuk menyalin nilai dan tidak ada opsi ekspor juga. Cara terbaik yang bisa saya lakukan adalah dengan menggunakan mongoexport, jika mongodb diinstal di lokal Anda, Anda dapat menggunakan mongoexport untuk terhubung ke database di server mana pun dan mengekstrak data

Untuk menyambung ke Data di server jarak jauh, dan file keluaran csv, jalankan mongoexport berikut di baris perintah Anda

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

fieldFile: membantu mengekstrak kolom yang diinginkan, contoh: isi dari field.txt bisa berupa:

identitas pengguna

untuk hanya mengekstrak nilai kolom 'userId'

Data di server jarak jauh, file keluaran json:

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

ini mengekstrak semua bidang ke dalam file json

data di localhost (mongodb harus berjalan di localhost)

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

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

Venkata Buddhiraju
sumber
1

Larutan:

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

masukkan deskripsi gambar di sini

Di mana:
database ->
nama kumpulan server tiruan ->
nama file keluaran api_defs -> childChoreRequest.json

amoljdv06.dll
sumber
1

Perpanjangan jawaban Florian Winter bagi orang-orang yang ingin menghasilkan kueri siap untuk dieksekusi.

dropdan insertManykueri menggunakan 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(']);');
}

Outputnya akan seperti:

db.foo.drop();
db.foo.insertMany([
{
    "_id" : ObjectId("abc"),
    "name" : "foo"
}
,
{
    "_id" : ObjectId("xyz"),
    "name" : "bar"
}
]);
Shaharyar
sumber
0
  1. lakukan pencarian Anda
  2. hasil tampilan tombol tekan dalam mode JSON
  3. salin hasil ke kata
  4. cetak hasil dari word
osama beshara
sumber
Ketika saya memiliki tanggal dalam dokumen saya, ia mengembalikan elemen ISODate yang bukan format json yang valid.
Constantino Cronemberger
1
Mengapa Anda menggunakan dokumen Word untuk menyimpan ekspor database? Dan mengapa ada orang yang ingin mencetak ekspor database?
maesk
@maesk 🤣🤣🤣🤣
Charlie Schliesser