Jak wydrukować ponad 20 pozycji (dokumentów) w powłoce MongoDB?


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

nie zrobię tego. Nadal drukuje tylko 20 dokumentów.

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

wydrukuje bardzo rozszerzony widok każdego dokumentu zamiast wersji 1-wierszowej dla find():


Domyślnie powłoka mongo drukuje tylko pierwsze 20 dokumentów, a następne 20 partii można uzyskać, wpisując Type itpowłokę. I tak dalej.
roottraveller

Odpowiedzi:


381

1
Czy istnieje sposób, aby uczynić to trwałym?
Łukasz Wiktor

7
@L ŁukaszWiktor tak, możesz utworzyć plik $ HOME / .mongorc.js i umieścić tam ustawienie shellBatchSize. mine ma ustawienie wielkości partii zapytania i włączoną funkcję rs.slaveOk (). jego użycie jest również nieco inne w przypadku korzystania z --eval poprzez wiersz poleceń. patrz: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
To wspaniale! Dzięki @matiaselgart
Łukasz Wiktor

link jest nieaktualny, nie zawiera takich informacji. Czy mogę również przekazać to jako zmienną środowiskową?
phil294,

157

Z powłoki, jeśli chcesz pokazać wszystkie wyniki, które możesz zrobić, db.collection.find().toArray()aby uzyskać wszystkie wyniki bez niego.


To. Jeśli chcesz je wszystkie w skorupce, aby móc je wycinać i wklejać, wystarczy.
superluminarny

Ten jest bardziej przydatny
anwerj

To właśnie to dla mnie zrobiło. Prawdę mówiąc, właśnie potrzebowałem sposobu, aby zapisać wszystkie wyniki z produkcji Robomongo. Dziękuję Ci!
Andrés Botero,

To świetnie, a także pozwoliło mi przesłać wynik do jq :)
Omer van Kloeten

Idealne rozwiązanie! Człowieku, to jest bardzo przydatne.
coderpc

93

Możesz użyć itwewnątrz powłoki, aby iterować kolejne 20 wyników. Po prostu wpisz, itjeśli zobaczysz „ma więcej”, a zobaczysz kolejne 20 pozycji.


35
och, tak naprawdę chodzi o to, jak wydrukować wszystko bez użyciait
nonpolarity

15
Dzięki, halfdan, jesteś dwa razy pod Twoją nazwą użytkownika!
cassi.lup

6
Całą ideą NIE jest używanie iteratora
Amir Kost

2
Odrzuciłem głos, ponieważ tego właśnie OP chciał uniknąć (co jest domyślnym zachowaniem).
crafter

41

Zawsze można zrobić:

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

Aby uzyskać ten kompaktowy widok.

Uważam również za bardzo przydatne ograniczenie pól zwracanych przez znalezisko, więc:

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

który zwróciłby tylko foo z pola _id i name.


1
Podoba mi się ten sposób, ponieważ może być uruchomiony w skrypcie powłoki (klient mongo z --eval)
Zheng Kai,

1
@ZhengKai, jeśli używasz skryptu, a nie w powłoce, to shellBatchSize nie ma znaczenia, ponieważ twoje wyniki nie będą powtarzane przez powłokę, będziesz musiał to zrobić sam.
Asya Kamsky,

Tojson () było dokładnie tym, czego szukałem do konwersji z DBQuery dziękuję!
Mark Pieszak - Trilon.io

4

Sugeruję, abyś miał ~/.mongorc.jsplik, więc nie musisz za każdym razem ustawiać domyślnego rozmiaru.

 # 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

Aby dowiedzieć się więcej o tym, co jeszcze możesz zrobić, proponuję zajrzeć do tego artykułu: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

W powłoce mangowej, jeśli zwrócony kursor nie jest przypisany do zmiennej za pomocą słowa kluczowego var, kursor jest automatycznie iterowany w celu uzyskania dostępu do pierwszych 20 dokumentów pasujących do zapytania. Możesz ustawić zmienną DBQuery.shellBatchSize, aby zmienić liczbę automatycznie iterowanych dokumentów.

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.