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

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

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

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

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

  • 0
    По умолчанию в оболочке mongo печатаются только первые 20 документов, вы можете получить следующие 20 документов, набрав « Type it в оболочке. И так далее.
Теги:

5 ответов

268
Лучший ответ

DBQuery.shellBatchSize = 300

сделает.

Документы MongoDB - Начало работы с оболочкой mongo - Выполнение запросов

  • 0
    Есть ли способ сделать это постоянным?
  • 3
    @LukaszWiktor да, вы можете создать файл $ HOME / .mongorc.js и поместить туда настройку shellBatchSize. У меня есть настройка размера пакета запроса и включена функция rs.slaveOk (). его использование также немного отличается при использовании --eval через командную строку. см .: docs.mongodb.com/manual/mongo/#mongorc-js-file
Показать ещё 1 комментарий
109

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

  • 29
    о, это действительно о том, как распечатать все без it использования
  • 12
    Спасибо, Халфдан, ты в два раза больше, чем твое имя пользователя!
Показать ещё 2 комментария
98

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

  • 0
    Это помогло мне :)
  • 0
    Это. Если вы просто хотите, чтобы все они были в оболочке, чтобы вы могли вырезать и вставлять, этого достаточно.
Показать ещё 4 комментария
30

Может всегда:

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 с --eval )
  • 1
    @ZhengKai, если вы используете скрипт, а не в оболочке, shellBatchSize не имеет значения, так как ваши результаты не будут повторяться для вас оболочкой, вам придется делать это самостоятельно.
Показать ещё 1 комментарий
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню