Красивая печать в оболочке MongoDB по умолчанию


516

Есть ли способ сказать Монго хорошему выводу на печать? В настоящее время все выводится в одну строку, и ее трудно читать, особенно с вложенными массивами и документами.


Теперь: как вы распечатываете его из внешнего javascript, загруженного в Mongo?
Витольд Качурба

@WitoldKaczurba Попробуйте найти ответ на свой вопрос. Если вы не нашли ответа, отправьте его как новый вопрос.
MForMarlon

Ответы:


868

( примечание: это ответ на оригинальную версию вопроса, в которой не было требований по умолчанию )

Вы можете попросить, чтобы это было красиво.

db.collection.find().pretty()

18
Если вы хотите, чтобы вывод был цветным + другие улучшения, посмотрите github.com/TylerBrock/mongo-hacker @SAFX
Райан Шумахер

Теперь: как вы распечатываете его из внешнего javascript, загруженного в Mongo? Это не сработает ...
Витольд Качурба

416

Можете добавить

DBQuery.prototype._prettyShell = true

в ваш файл, $HOME/.mongorc.jsчтобы включить красоту печати по умолчанию.


13
Вы захотите сделать пользовательскую функцию, которая отключит ее для вас. Добавьте это к $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Затем вы можете сделать что-то вроде db.users.find (). Ugly (), чтобы получить его без красивой печати.
staackuser2

5
+1 Это здорово. Для тех, у кого нет файла .mongorc.js в папке $ HOME; Вы можете создать этот файл и добавить в него команды. После перезапуска оболочки все работает!
предыдущий_разработчик

Как я могу проверить в командной строке cli или mongo, что эта опция включена? Я имею в виду, есть ли специальная команда для этого, например mongo --checkConf 'pretty', не по телефонуdb.collection.find().limit(1)
Зеленый

1
@ staackuser2, эта ссылка, кажется, не работает :(
micseydel

Это должен быть принятый ответ, так как на вопрос указывается: как сделать это вариантом по умолчанию. Пользователь уже знаком с методом .pretty (), но не хочет писать его каждый раз
Ариэль Монако,

54

(примечание: это ответ на обновленный вопрос)

Вы можете просто сделать это на CLI:

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

И это всегда даст хорошие результаты.


1
Это сработало для меня отлично. | Версия оболочки MongoDB: 2.6.7 и Oh-My-Zsh версия e55c715
tjfwalker

20

Поскольку это в основном оболочка javascript, вы также можете использовать toArray():

db.collection.find().toArray()

Тем не менее, это будет печатать все документы коллекции в отличие от того, pretty()что позволит вам выполнить итерацию. См. Http://docs.mongodb.org/manual/reference/method/cursor.toArray/


2
Интересно, что из консоли .toArray()функция выводит лучше отформатированный JSON, чем .pretty()функция. то есть: первая запись моей коллекции отличается от остальных (что может быть проблемой), но .pretty()выдает ее как { "_id" : "VERSION", "v" : "1.5" }- все в одну строку, где .toArray()форматируется так же, как и остальные записи ...
wasatchwizard

17

О, так что я думаю .pretty () невероятно похож на:

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

8

Попробуйте Mongo-hacker (модуль узла), он всегда печатает довольно. https://github.com/TylerBrock/mongo-hacker

Более того, он улучшает оболочку mongo (поддерживает только версию> 2.4, текущую версию 3.0), например

  • Раскраска
  • Дополнительные команды оболочки (считать документы / считать документы / и т. Д.)
  • Дополнения API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse () и т. Д.)
  • Структура агрегации

Я использую в то время как в производственной среде, никаких проблем пока нет.


Что если у меня нет mongodb, только что установил метеор?
pihentagy

Примечание: когда вы устанавливаете mongo-хакер с помощью npm, он перезаписывается $HOME/.mongorc.js.
Hubro

1

Добрался до вопроса, но не смог понять, как распечатать его из загруженного извне монго. Так:

Это работает для консоли: и предпочтительнее в консоли, но не работает во внешнем моно-загруженном JavaScript:

db.quizes.find().pretty()

Это работает во внешнем монго-загруженном javscript:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.