MongoDB'nin kabuğuna 20'den fazla ürün (belge) nasıl yazdırılır?


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

yapmayacak. Hala sadece 20 belge yazdırıyor.

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

her ikisi de 1 satırlık sürüm yerine her belgenin çok genişletilmiş görünümünü yazdırır find():


Varsayılan olarak mongo kabuk yalnızca ilk 20 belgeyi yazdırır, sonraki 20 belgeyi Type itkabuğa yazarak alabilirsiniz . Ve bunun gibi.
roottraveller

Yanıtlar:


382

1
Bunu kalıcı yapmanın bir yolu var mı?
Lukasz Wiktor

7
@LukaszWiktor evet, bir $ HOME / .mongorc.js dosyası oluşturabilir ve bu shellBatchSize ayarını buraya koyabilirsiniz. benimki toplu iş boyutu ayarına sahip ve rs.slaveOk () etkin. komut satırı üzerinden --eval kullanılırken kullanımı da biraz farklıdır. bkz. docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
Bu harika! Teşekkürler @matiaselgart
Lukasz Wiktor

bağlantı eski, böyle bir bilgi içermiyor. Ayrıca, bunu bir ortam değişkeni olarak iletebilir miyim?
phil294

157

Tüm sonuçları göstermek istiyorsanız, db.collection.find().toArray()tüm sonuçları onsuz almak için yapabileceğiniz kabuktan .


Bu. Kesip yapıştırabilmeniz için hepsini bir kabukta istiyorsanız, bu yeterlidir.
superluminary

Bu daha yararlı
anwerj

Bunu benim için yaptı. Gerçek şu ki, Robomongo çıktısının tüm sonuçlarını kaydetmek için bir yola ihtiyacım vardı. Teşekkür ederim!
Andrés Botero

Bu harika ve aynı zamanda sonucu
jq'ye yönlendirmeme

Mükemmel çözüm! Dostum, bu çok faydalı.
coderpc

93

itSonraki 20 sonuç üzerinde yineleme yapmak için kabuğun içini kullanabilirsiniz . Sadece yazın itsiz "daha vardır" görürseniz ve sonraki 20 ürün göreceksiniz.


35
oh gerçekten kullanmadan nasıl yazdırılacağı ile ilgiliit
nonopolarity

15
Teşekkürler halfdan, kullanıcı adının iki kez olduğunu söylüyorsun!
cassi.lup

6
Bütün fikir yineleyici kullanmak DEĞİL
Amir Kost

2
OP'nin kaçınmak istediği şey budur (varsayılan davranış).
crafter

41

Her zaman yapabilir:

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

Bu kompakt görünümü elde etmek için.

Ayrıca, bul tarafından döndürülen alanları sınırlamak çok yararlı buluyorum:

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

foo'dan sadece _id ve name alanını döndürür.


1
Kabuk betiğinde (mongo istemcisi ile --eval) çalışabileceğinden dolayı bu şekilde beğendim
Zheng Kai

1
@ZhengKai bir komut dosyası kullanıyorsanız ve kabukta değilseniz, sonuçlarınız kabuk tarafından sizin için yinelenmeyeceğinden shellBatchSize ilgili değildir, kendiniz yapmanız gerekir.
Asya Kamsky

Tojson () tam olarak DBQuery onu dönüştürmek için aradığım şey oldu teşekkür ederim!
Mark Pieszak - Trilon.io

4

Her ~/.mongorc.jszaman varsayılan boyutu ayarlamanıza gerek kalmadan bir dosyaya sahip olmanızı öneririm .

 # 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

Başka neler yapabileceğiniz hakkında daha fazla bilgi edinmek için bu makaleye bakmanızı öneririz: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

Mongo kabuğunda, döndürülen imleç var anahtar sözcüğünü kullanarak bir değişkene atanmamışsa, imleç sorguyla eşleşen ilk 20 belgeye erişmek için otomatik olarak yinelenir. Otomatik olarak yinelenen belgelerin sayısını değiştirmek için DBQuery.shellBatchSize değişkenini ayarlayabilirsiniz.

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.