Impressão bonita no shell MongoDB como padrão

516

Existe uma maneira de dizer ao Mongo para imprimir bastante? Atualmente, tudo é produzido em uma única linha e é difícil de ler, especialmente com matrizes e documentos aninhados.

rafiano
fonte
Agora: como imprimi-lo a partir de javascript externo carregado no Mongo?
Witold Kaczurba
@WitoldKaczurba Tente procurar a resposta para sua pergunta. Se você não encontrar uma resposta, vá em frente e publique-a como uma nova pergunta.
MForMarlon 16/07/19

Respostas:

868

( nota: esta é a resposta à versão original da pergunta, que não tinha requisitos para "padrão" )

Você pode pedir que seja bonito.

db.collection.find().pretty()
Sergio Tulentsev
fonte
18
Se você quer saída colorizado + outras melhorias confira github.com/TylerBrock/mongo-hacker @SAFX
Ryan Schumacher
Agora: como imprimi-lo a partir de javascript externo carregado no Mongo? Isso não vai funcionar ...
Witold Kaczurba
416

Você pode adicionar

DBQuery.prototype._prettyShell = true

no seu arquivo $HOME/.mongorc.jspara permitir uma impressão bonita globalmente por padrão.

staackuser2
fonte
13
Você desejará criar uma função personalizada que a desative. Adicione isso ao seu $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Então, você pode fazer algo como db.users.find (). Ugly () para obtê-lo sem uma boa impressão.
precisa saber é o seguinte
5
+1 Isso é ótimo. Para quem não possui um arquivo .mongorc.js na pasta $ HOME; você pode criar esse arquivo e adicionar comandos nele. Depois de reiniciar o shell, ele funciona!
Anterior_developer
Como posso verificar em um cli ou no mongo shell que esta opção foi ativada? Quero dizer, existe um comando especial para isso, tipo mongo --checkConf 'pretty', não ligando para odb.collection.find().limit(1)
Green
1
@ staackuser2, que apontam parece estar quebrado :(
micseydel
Essa deve ser a resposta aceita, conforme a pergunta é apontada: como fazer disso uma opção padrão. O usuário já está familiarizado com o método .pretty (), mas não quero escrever-lo cada vez
Ariel Monaco
54

(nota: esta é a resposta para a pergunta atualizada)

Você pode fazer isso na CLI:

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

E sempre vai gerar resultados bonitos.

Bhanu Chawla
fonte
1
Isso funcionou para mim perfeitamente. | Versão shell do MongoDB: 2.6.7 e versão Oh-My-Zsh e55c715
tjfwalker
20

Como é basicamente um shell javascript, você também pode usar toArray():

db.collection.find().toArray()

No entanto, isso imprimirá todos os documentos da coleção, ao contrário do pretty()que permitirá a iteração. Consulte: http://docs.mongodb.org/manual/reference/method/cursor.toArray/

Aafreen Sheikh
fonte
2
Curiosamente, a partir do console, a .toArray()função gera JSON melhor formatado que a .pretty()função. ou seja: O primeiro registro de minha coleção é diferente do que o resto (que pode ser o problema), mas .pretty()despeja-lo como { "_id" : "VERSION", "v" : "1.5" }- tudo na mesma linha, onde .toArray()formatado-lo agradável como o resto dos registros ..
wasatchwizard
17

Ah, então eu acho .pretty () é igual a:

db.collection.find().forEach(printjson);
Goff
fonte
8

Tente o Mongo-hacker (módulo do nó), ele sempre é bonito. https://github.com/TylerBrock/mongo-hacker

Além disso, aprimora o shell mongo (suporta apenas a versão> 2.4, a versão atual é 3.0), como

  • Colorização
  • Comandos adicionais do shell (documentos de contagem / documentos de contagem / etc)
  • Adições de API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse (), etc)
  • Estrutura de agregação

Estou usando por enquanto na produção, sem problemas ainda.

Gaurav Gandhi
fonte
E se eu não tiver mongodb, apenas instalei o meteoro?
pihentagy
Nota: quando você instala o mongo-hacker usando o npm, ele aparentemente sobrescreve $HOME/.mongorc.js.
Hubro 9/16
1

Chegou à questão, mas não conseguiu descobrir como imprimi-lo a partir do mongo carregado externamente. Assim:

Isso funciona para o console: e é preferido no console, mas não funciona no javascript externo carregado por mongo:

db.quizes.find().pretty()

Isso funciona em javscript externo carregado por mongo:

db.quizes.find().forEach(printjson)
Witold Kaczurba
fonte
-1

Veja isso:

db.collection.find().pretty()
Mohammad Heydari
fonte