Secara khusus, saya ingin mencetak hasil mongodb find()
ke file. Objek JSON terlalu besar sehingga saya tidak dapat melihat keseluruhan objek dengan ukuran jendela shell.
sumber
Secara khusus, saya ingin mencetak hasil mongodb find()
ke file. Objek JSON terlalu besar sehingga saya tidak dapat melihat keseluruhan objek dengan ukuran jendela shell.
Shell menyediakan beberapa fitur bagus tetapi tersembunyi karena ini adalah lingkungan yang interaktif.
Saat Anda menjalankan perintah dari file javascript melalui mongo commands.js, Anda tidak akan mendapatkan perilaku yang cukup identik.
Ada dua cara untuk mengatasi ini.
(1) berpura-pura cangkang dan membuatnya berpikir Anda dalam mode interaktif
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
atau
(2) gunakan Javascript untuk menerjemahkan hasil dari a find()
menjadi JSON yang dapat dicetak
mongo dbname command.js > output.json
di mana command.js berisi ini (atau yang setara):
printjson( db.collection.find().toArray() )
Ini cukup mencetak larik hasil, termasuk [ ]
- jika Anda tidak ingin Anda dapat mengulang larik dan printjson()
setiap elemen.
Omong-omong, jika Anda menjalankan hanya satu pernyataan Javascript, Anda tidak perlu memasukkannya ke dalam file dan sebagai gantinya Anda dapat menggunakan:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt
tetapi itu memberi sayaJavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
.Karena Anda melakukan ini di terminal dan hanya ingin memeriksa record dengan cara yang waras, Anda dapat menggunakan trik seperti ini:
Gunakan sesi seperti biasa -
db.collection.find().pretty()
atau apa pun yang perlu Anda lakukan, abaikan output panjang, dan keluar. Transkrip sesi Anda akan ada di file yangtee
ditulis ke.Perhatikan bahwa keluaran mungkin berisi urutan pelolosan dan sampah lainnya karena mongo shell mengharapkan sesi interaktif.
less
menangani ini dengan anggun.sumber
Cukup letakkan perintah yang ingin Anda jalankan ke dalam file, lalu teruskan ke shell bersama dengan nama database dan arahkan output ke file. Jadi, jika perintah find Anda ada di dalam
find.js
dan database Andafoo
, akan terlihat seperti ini:sumber
out.json
.mongo foo < find.js > out.json
berhasil.Letakkan kueri Anda (misalnya
db.someCollection.find().pretty()
) ke file javascript, katakanlahquery.js
. Kemudian jalankan di shell sistem operasi Anda menggunakan perintah:mongo yourDb < query.js > outputFile
Hasil kueri akan berada di file bernama 'outputFile'.
Secara default Mongo mencetak 20 dokumen pertama IIRC. Jika Anda ingin lebih, Anda dapat menentukan nilai baru untuk ukuran batch di shell Mongo, misalnya
DBQuery.shellBatchSize = 100
.sumber
.js
ekstensi. Anda dapat menulis semua kueri mongo shell yang bagus tanpa mengubahnya sama sekali.Menggunakan
print
danJSON.stringify
Anda dapat dengan mudah menghasilkan hasil yang validJSON
.Gunakan
--quiet
tanda untuk memfilter kebisingan shell dari keluaran.Gunakan
--norc
bendera untuk menghindari.mongorc.js
evaluasi. (Saya harus melakukannya karena formatter-cantik yang saya gunakan, yang menghasilkan keluaran JSON yang tidak valid ) GunakanDBQuery.shellBatchSize = ?
penggantian?
dengan batas hasil sebenarnya untuk menghindari paging.Dan terakhir, gunakan
tee
untuk menyalurkan output terminal ke file:Semoga ini membantu!
sumber
Menggunakan jawaban dari Asya Kamsky ini, saya menulis skrip bat satu baris untuk Windows. Garisnya terlihat seperti ini:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
Kemudian seseorang dapat menjalankannya:
exportToJson.bat DbName CollectionName
sumber
Saya berhasil menyimpan hasil dengan fungsi writeFile () .
Versi shell Mongo adalah 4.0.9
sumber
Juga ada mongoexport untuk itu, tapi saya tidak yakin sejak versi mana itu tersedia.
Contoh:
sumber
Sebagai jawaban oleh Neodan mongoexport cukup berguna dengan
-q
opsi untuk kueri. Itu juga dikonversiObjectId
ke format standar JSON"$oid"
. Misalnya:sumber
Anda dapat menggunakan perintah ini untuk mencapainya:
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json
sumber