Как распечатать более 20 документов (документов) в оболочке MongoDB?


253
db.foo.find().limit(300)

не буду этого делать Он по-прежнему печатает только 20 документов.

db.foo.find().toArray()
db.foo.find().forEach(printjson)

оба распечатают очень расширенный вид каждого документа вместо 1-строчной версии для find():


По умолчанию в оболочке mongo печатаются только первые 20 документов, вы можете получить следующие 20 документов, набрав Type itв оболочке. И так далее.
— roottraveller

Ответы:


381

1
Есть ли способ сделать это постоянным?
— Лукаш Виктор

7
@LukaszWiktor да, вы можете создать файл $ HOME / .mongorc.js и поместить туда настройку shellBatchSize. У меня есть настройка размера пакета запроса и включена функция rs.slaveOk (). его использование также немного отличается при использовании --eval через командную строку. см .: docs.mongodb.com/manual/mongo/#mongorc-js-file
— Матиас Элгарт

1
Замечательно! Спасибо @matiaselgart
— Лукаш Виктор

ссылка устарела, такой информации нет. Кроме того, я могу передать это как переменную среды?
— phil294

157

Из оболочки, если вы хотите показать все результаты, вы можете сделать, db.collection.find().toArray()чтобы получить все результаты без него.


Это. Если вы просто хотите, чтобы все они были в оболочке, чтобы вы могли вырезать и вставлять, этого достаточно.
— суперсветовой

Этот более полезен
— anwerj

Это именно то, что сделал это для меня. По правде говоря, мне просто нужен был способ сохранить все результаты из результатов Robomongo. Спасибо!
— Андрес Ботеро

Это здорово, и это также позволило мне передать результат в jq :)
— Омер ван Клоэтен

Идеальное решение! Чувак, это очень полезно.
— coderpc

93

Вы можете использовать itвнутри оболочки, чтобы перебрать следующие 20 результатов. Просто введите, itесли вы видите «имеет больше», и вы увидите следующие 20 пунктов.


35
о, это действительно о том, как распечатать все без использованияit
— неполярность

15
Спасибо, Халфдан, ты в два раза больше, чем твое имя пользователя!
— cassi.lup

6
Вся идея НЕ в том, чтобы использовать итератор
— Амир Кост

2
Я понизил голосование, потому что это то, чего ОП хотел избежать (это поведение по умолчанию).
— Crafter

41

Всегда можно сделать:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

Чтобы получить этот компактный вид.

Кроме того, я считаю очень полезным ограничить поля, возвращаемые функцией find, так:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

который вернул бы только поле _id и name из foo.


1
Мне нравится этот способ, потому что он может работать в сценарии оболочки (клиент Монго с --eval)
— Чжэн Кай

1
@ZhengKai, если вы используете скрипт, а не в оболочке, shellBatchSize не имеет значения, поскольку ваши результаты не будут повторяться для вас оболочкой, вам придется делать это самостоятельно.
— Ася Камская

Тойсон () был именно тем, что я искал, чтобы преобразовать его из DBQuery, спасибо!
— Марк Пешак - Trilon.io

4

Я предлагаю вам иметь ~/.mongorc.jsфайл, чтобы вам не приходилось каждый раз устанавливать размер по умолчанию.

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

Чтобы узнать больше о том, что еще вы можете сделать, я предлагаю вам взглянуть на эту статью: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

В оболочке mongo, если возвращенный курсор не назначен переменной с помощью ключевого слова var, курсор автоматически повторяется для доступа к первым 20 документам, которые соответствуют запросу. Вы можете установить переменную DBQuery.shellBatchSize, чтобы изменить количество автоматически повторяющихся документов.

Ссылка - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

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