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():


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

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.


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.


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.


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


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/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.