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

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

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

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

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

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

Ответы:

381

DBQuery.shellBatchSize = 300

Сделаю.

MongoDB Docs - Настройка оболочки Монго - Изменение размера партии оболочки Монго

Тило
источник
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/

Суровый Радж
источник