Ładny wydruk w powłoce MongoDB jako domyślny


516

Czy istnieje sposób, aby powiedzieć Mongo, aby ładnie drukowała? Obecnie wszystko jest wyprowadzane do jednej linii i jest trudne do odczytania, szczególnie w przypadku zagnieżdżonych tablic i dokumentów.


Teraz: jak wydrukować go z zewnętrznego javascript załadowanego do Mongo?
Witold Kaczurba

@WitoldKaczurba Spróbuj wyszukać odpowiedź na swoje pytanie. Jeśli nie znajdziesz odpowiedzi, napisz ją jako nowe pytanie.
MForMarlon

Odpowiedzi:



416

Możesz dodać

DBQuery.prototype._prettyShell = true

do pliku, $HOME/.mongorc.jsaby domyślnie włączyć globalne drukowanie całkiem ładnie.


13
Będziesz chciał stworzyć niestandardową funkcję, która ją wyłączy. Dodaj to do $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Następnie możesz zrobić coś takiego jak db.users.find (). Ugly (), aby uzyskać to bez ładnego wydruku.
staackuser2

5
+1 To jest świetne. Dla tych, którzy nie mają pliku .mongorc.js w folderze $ HOME; możesz utworzyć ten plik i dodać do niego polecenia. Po ponownym uruchomieniu powłoki działa!
previous_developer

Jak mogę sprawdzić w powłoce cli lub mongo, czy ta opcja została włączona? Chodzi mi o to, czy istnieje specjalne polecenie, na przykład mongo --checkConf 'pretty'nie dzwonieniedb.collection.find().limit(1)
Green

1
@ staackuser2, ten link wydaje się być zepsuty :(
micseydel

To powinna być zaakceptowana odpowiedź, ponieważ pytanie jest skierowane: jak ustawić tę opcję jako domyślną. Użytkownik jest już zaznajomiony z metodą .pretty (), ale nie chce jej pisać za każdym razem
Ariel Monaco

54

(uwaga: jest to odpowiedź na zaktualizowane pytanie)

Możesz to zrobić na CLI:

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

I zawsze przyniesie ładne wyniki.


1
To działało dla mnie idealnie. | Wersja powłoki MongoDB: 2.6.7 i Oh-My-Zsh e55c715
tjfwalker

20

Ponieważ jest to w zasadzie powłoka javascript, możesz także użyć toArray():

db.collection.find().toArray()

Spowoduje to jednak wydrukowanie wszystkich dokumentów z kolekcji, w przeciwieństwie pretty()do iteracji. Patrz: http://docs.mongodb.org/manual/reference/method/cursor.toArray/


2
Co ciekawe, z konsoli .toArray()funkcja wypisuje lepiej sformatowany JSON niż .pretty()funkcja. tj .: Pierwszy rekord z mojej kolekcji różni się od reszty (co może być problemem), ale .pretty()zrzuca go jako { "_id" : "VERSION", "v" : "1.5" }- wszystko w jednym wierszu, gdzie .toArray()sformatowane jest ładnie jak reszta rekordów.
wasatchwizard

17

Och, więc myślę, że .pretty () jest równa:

db.collection.find().forEach(printjson);

8

Spróbuj hakera Mongo (moduł węzła), zawsze drukuje się ładnie. https://github.com/TylerBrock/mongo-hacker

Więcej poprawia powłokę mongo (obsługuje tylko wersję> 2.4, obecna wersja to 3.0), jak

  • Koloryzacja
  • Dodatkowe polecenia powłoki (licz dokumenty / licz dokumenty / etc)
  • Dodatki API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse () itp.)
  • Ramy agregacji

Używam od czasu env produkcji, żadnych problemów jeszcze.


Co jeśli nie mam mongodb, właśnie zainstalowałem meteor?
pihentagy

Uwaga: gdy instalujesz mongo-hakera za pomocą npm, najwyraźniej nadpisuje $HOME/.mongorc.js.
Hubro,

1

Dotarłem do pytania, ale nie mogłem wymyślić, jak go wydrukować z mongo załadowanego zewnętrznie. Więc:

Działa to w przypadku konsoli: i jest preferowane w konsoli, ale nie działa w zewnętrznym javascript ładowanym przez mongo:

db.quizes.find().pretty()

Działa to w zewnętrznym javscript załadowanym w mongo:

db.quizes.find().forEach(printjson)

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.