Cukup mencetak dalam shell MongoDB sebagai default

516

Apakah ada cara untuk memberi tahu Mongo tentang hasil cetak yang cantik? Saat ini, semuanya adalah output ke satu baris dan sulit untuk dibaca, terutama dengan array dan dokumen bersarang.

orang rafia
sumber
Sekarang: bagaimana Anda mencetaknya dari javascript eksternal yang dimuat ke dalam bahasa Mongo?
Witold Kaczurba
@WitoldKaczurba Cobalah mencari jawaban untuk pertanyaan Anda. Jika Anda tidak menemukan jawaban, silakan dan posting sebagai pertanyaan baru.
MForMarlon

Jawaban:

868

( catatan: ini adalah jawaban untuk versi asli dari pertanyaan, yang tidak memiliki persyaratan untuk "default" )

Anda bisa meminta untuk menjadi cantik.

db.collection.find().pretty()
Sergio Tulentsev
sumber
18
Jika Anda ingin output diwarnai + perangkat tambahan lainnya, periksa github.com/TylerBrock/mongo-hacker @SAFX
Ryan Schumacher
Sekarang: bagaimana Anda mencetaknya dari javascript eksternal yang dimuat ke dalam bahasa Mongo? Ini tidak akan berhasil ...
Witold Kaczurba
416

Anda dapat menambahkan

DBQuery.prototype._prettyShell = true

ke file Anda $HOME/.mongorc.jsuntuk mengaktifkan cukup cetak secara global.

staackuser2
sumber
13
Anda ingin membuat fungsi khusus yang menonaktifkannya untuk Anda. Tambahkan ini ke $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Kemudian Anda dapat melakukan sesuatu seperti db.users.find (). Ugly () untuk mendapatkannya tanpa cetak cantik.
staackuser2
5
+1 Ini luar biasa. Bagi mereka yang tidak memiliki file .mongorc.js di folder $ HOME; Anda dapat membuat file ini dan menambahkan perintah di dalamnya. Setelah Anda me-restart shell, itu berhasil!
previous_developer
Bagaimana saya bisa memverifikasi di cli atau di mongo shell bahwa opsi ini telah diaktifkan? Maksud saya, apakah ada perintah khusus untuk itu, seperti mongo --checkConf 'pretty', bukan dengan menelepondb.collection.find().limit(1)
Green
1
@ staackuser2, tautan itu tampaknya rusak :(
micseydel
Ini harus menjadi jawaban yang diterima karena pertanyaannya ditujukan: bagaimana menjadikan ini opsi default. Pengguna sudah terbiasa dengan metode .pretty () tetapi tidak ingin menulisnya setiap waktu
Ariel Monaco
54

(catatan: ini adalah jawaban untuk pertanyaan yang diperbarui)

Anda bisa melakukan ini di CLI:

echo DBQuery.prototype._prettyShell = true >> ~/.mongorc.js

Dan selalu akan menampilkan hasil yang bagus.

Bhanu Chawla
sumber
1
Ini bekerja dengan baik untuk saya. | Versi shell MongoDB: 2.6.7 dan versi Oh-My- Zsh e55c715
tjfwalker
20

Karena ini pada dasarnya adalah shell javascript, Anda juga dapat menggunakan toArray():

db.collection.find().toArray()

Namun, ini akan mencetak semua dokumen koleksi yang tidak seperti pretty()itu akan memungkinkan Anda untuk beralih. Lihat: http://docs.mongodb.org/manual/reference/method/cursor.toArray/

Aafreen Sheikh
sumber
2
Cukup menarik, dari konsol .toArray()fungsi menghasilkan JSON yang diformat lebih baik daripada .pretty()fungsi. yaitu: Catatan pertama koleksi saya berbeda dari yang lain (yang mungkin menjadi masalah), tetapi .pretty()membuangnya sebagai { "_id" : "VERSION", "v" : "1.5" }- semua dalam satu baris, di mana .toArray()diformat dengan baik seperti sisa catatan ..
wasatchwizard
17

Oh, jadi saya kira .pretty () sama dengan:

db.collection.find().forEach(printjson);
Goff
sumber
8

Cobalah untuk Mongo-hacker (modul simpul), itu selalu mencetak cantik. https://github.com/TylerBrock/mongo-hacker

Lebih meningkatkan mongo shell (hanya mendukung ver> 2.4, ver saat ini 3.0), seperti

  • Pewarnaan
  • Perintah shell tambahan (hitung dokumen / hitung dokumen / dll)
  • Penambahan API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse (), dll)
  • Kerangka Kerja Agregasi

Saya menggunakan untuk sementara dalam produksi env, belum ada masalah.

Gaurav Gandhi
sumber
Bagaimana jika saya tidak punya mongodb, baru saja menginstal meteor?
pihentagy
Catatan: ketika Anda menginstal mongo-peretas menggunakan npm, tampaknya menimpa $HOME/.mongorc.js.
Hubro
1

Mendapat pertanyaan tetapi tidak tahu bagaimana cara mencetaknya dari mongo yang dimuat secara eksternal. Begitu:

Ini berfungsi untuk konsol: dan lebih disukai di konsol, tetapi tidak berfungsi di javascript eksternal mongo-loaded:

db.quizes.find().pretty()

Ini berfungsi di javascript skrip mongo eksternal:

db.quizes.find().forEach(printjson)
Witold Kaczurba
sumber
-1

Lihat ini:

db.collection.find().pretty()
Mohammad Heydari
sumber