Як роздрукувати більше 20 елементів (документів) в оболонці MongoDB?


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

не зробить цього. На ньому досі друкується лише 20 документів.

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

буде надруковано дуже розгорнутий вигляд кожного документа замість однорядкової версії для find():


За замовчуванням монго друкує лише перші 20 документів, можна отримати наступну партію 20 документів, ввівши Type itоболонку. І так далі.
roottraveller

Відповіді:


381

1
Чи є спосіб зробити це наполегливим?
Лукаш Віктор

7
@LukaszWiktor так, ви можете створити файл $ HOME / .mongorc.js і помістити там налаштування shellBatchSize. шахта має налаштування розміру партії запитів та увімкнено rs.slaveOk (). його використання також дещо відрізняється при використанні --eval за допомогою командної лінії. дивіться: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
Це чудово! Дякую @matiaselgart
Лукаш Віктор

посилання застаріле, воно не містить такої інформації. Також чи можу я передати це як змінну середовища?
phil294

157

З оболонки, якщо ви хочете показати всі результати, які ви могли б зробити, db.collection.find().toArray()щоб отримати всі результати без цього.


Це. Якщо ви просто хочете, щоб усі вони були в оболонці, щоб ви могли вирізати і вставити, цього достатньо.
суперлюмінація

Цей корисніший
anwerj

Саме це зробило це для мене. Правду кажучи, мені просто потрібен спосіб зберегти всі результати від виходу Robomongo. Дякую!
Андрес Ботеро

Це чудово, і це також дозволило мені передати результат jq :)
Omer van Kloeten

Ідеальне рішення! Людина, це дуже корисно.
coderpc

93

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


35
О, це дійсно про те, як роздрукувати все без використанняit
nonopolarity

15
Дякую, полудан, ти вдвічі більше, ніж твоє ім’я користувача, говорить, що ти!
cassi.lup

6
Вся ідея НЕ використовувати ітератор
Амір Кост

2
Я схвалив, тому що цього хотіла уникнути ОП (що є поведінкою за замовчуванням).
крафтер

41

Завжди можна:

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

Щоб отримати такий компактний вигляд.

Крім того, я вважаю дуже корисним обмежувати поля, повернені знахідкою, таким чином:

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

яке повертало б лише поле _id та ім'я з 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.