Bagaimana cara mencetak lebih dari 20 item (dokumen) di shell MongoDB?

253
db.foo.find().limit(300)

tidak akan melakukannya. Masih mencetak hanya 20 dokumen.

db.foo.find().toArray()
db.foo.find().forEach(printjson)

keduanya akan mencetak tampilan yang sangat luas dari setiap dokumen, bukan versi 1-baris untuk find():

nonopolaritas
sumber
Secara default mongo shell hanya mencetak 20 dokumen pertama, Anda bisa mendapatkan batch 20 dokumen berikutnya dengan mengetikkan Type itshell. Dan seterusnya.
roottraveller

Jawaban:

381

DBQuery.shellBatchSize = 300

akan melakukan.

MongoDB Documents - Konfigurasikan mongo Shell - Ubah Ukuran Bong Shell mongo

Thilo
sumber
1
Apakah ada cara untuk membuat ini gigih?
Lukasz Wiktor
7
@LukaszWiktor ya, Anda dapat membuat file $ HOME / .mongorc.js dan meletakkan pengaturan shellBatchSize di sana. tambang memiliki pengaturan ukuran kumpulan kueri dan rs.slaveOk () diaktifkan. penggunaannya juga sedikit berbeda saat menggunakan --eval via commandline. lihat: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart
1
Itu hebat! Terima kasih @matiaselgart
Lukasz Wiktor
tautannya sudah usang, tidak mengandung informasi seperti itu. Juga, dapatkah saya meneruskan ini sebagai variabel lingkungan?
phil294
157

Dari shell jika Anda ingin menampilkan semua hasil yang dapat Anda lakukan db.collection.find().toArray()untuk mendapatkan semua hasil tanpa itu.

Sridhar
sumber
Ini. Jika Anda hanya ingin semuanya dalam cangkang sehingga Anda dapat memotong dan menempel, ini sudah cukup.
superluminary
Yang ini lebih berguna
anwerj
Inilah yang melakukannya untuk saya. Sejujurnya saya hanya perlu cara untuk menyimpan semua hasil dari output Robomongo. Terima kasih!
Andrés Botero
Itu hebat, dan juga biarkan saya menyalurkan hasilnya ke jq :)
Omer van Kloeten
Solusi sempurna! Sobat, ini sangat berguna.
coderpc
93

Anda dapat menggunakan itbagian dalam shell untuk mengulangi 20 hasil berikutnya. Cukup ketik itjika Anda melihat "memiliki lebih banyak" dan Anda akan melihat 20 item berikutnya.

halfdan
sumber
35
oh ini benar-benar tentang cara mencetak semua tanpa menggunakanit
nonopolaritas
15
Terima kasih halfdan, Anda dua kali nama pengguna Anda mengatakan Anda!
cassi.lup
6
Seluruh ide BUKAN untuk menggunakan iterator
Amir Kost
2
Saya downvoted karena ini adalah apa yang OP ingin hindari (yang merupakan perilaku default).
perajin
41

Selalu bisa:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

Untuk mendapatkan tampilan ringkas itu.

Juga, saya merasa sangat berguna untuk membatasi bidang yang dikembalikan oleh find jadi:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

yang akan mengembalikan hanya bidang _id dan nama dari foo.

Wilfred Knievel
sumber
1
Saya suka cara ini karena dapat berjalan dalam skrip shell (mongo client with --eval)
Zheng Kai
1
@ZhengKai jika Anda menggunakan skrip dan tidak di shell maka shellBatchSize tidak relevan karena hasil Anda tidak akan diulangi untuk Anda oleh shell, Anda harus melakukannya sendiri.
Asya Kamsky
Tojson () adalah persis apa yang saya cari untuk mengubahnya dari DBQuery terima kasih!
Mark Pieszak - Trilon.io
4

Saya sarankan Anda memiliki ~/.mongorc.jsfile sehingga Anda tidak perlu mengatur ukuran default setiap kali.

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

Untuk mengetahui lebih banyak tentang apa lagi yang dapat Anda lakukan, saya sarankan Anda untuk melihat artikel ini: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html

Sahith Vibudhi
sumber
0

Di mongo shell, jika kursor yang dikembalikan tidak ditugaskan ke variabel menggunakan kata kunci var, kursor secara otomatis diulang untuk mengakses hingga 20 dokumen pertama yang cocok dengan kueri. Anda dapat mengatur variabel DBQuery.shellBatchSize untuk mengubah jumlah dokumen yang diulang secara otomatis.

Referensi - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

Harsh Raj
sumber