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

516

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

raffian
источник
Теперь: как вы распечатываете его из внешнего 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чтобы включить красоту печати по умолчанию.

staackuser2
источник
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)
Витольд Качурба
источник
-1

Проверь это:

db.collection.find().pretty()
Мухаммед Гейдари
источник