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.


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:



416

Você pode adicionar

DBQuery.prototype._prettyShell = true

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


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.


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/


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);

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.


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)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.