Como imprimir mais de 20 itens (documentos) no shell do MongoDB?


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

não vai fazer isso. Ele ainda imprime apenas 20 documentos.

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

ambos imprimirão uma exibição muito expandida de cada documento, em vez da versão de uma linha para find():


Por padrão, o mongo shell imprime apenas os primeiros 20 documentos, você pode obter o próximo lote de 20 documentos digitando Type itno shell. E assim por diante.
roottraveller

Respostas:


381

1
Existe uma maneira de tornar isso persistente?
Lukasz Wiktor

7
@LukaszWiktor sim, você pode criar um arquivo $ HOME / .mongorc.js e colocar essa configuração shellBatchSize lá. o meu tem a configuração de tamanho de lote da consulta e rs.slaveOk () ativado. Seu uso também é um pouco diferente ao usar --eval via linha de comando. consulte: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
Isso é ótimo! Obrigado @matiaselgart
Lukasz Wiktor

o link está desatualizado, ele não contém essas informações. Além disso, posso passar isso como uma variável de ambiente?
precisa saber é

157

No shell, se você quiser mostrar todos os resultados, poderá db.collection.find().toArray()obter todos os resultados sem ele.


Este. Se você quiser apenas todos em uma concha para poder recortar e colar, isso é suficiente.
superluminary

Este é mais útil
anwerj

Isso é exatamente o que fez por mim. Verdade seja dita, eu só precisava de uma maneira de salvar todos os resultados da saída de Robomongo. Obrigado!
Andrés Botero

Isso é ótimo, e também deixe-me tubulação o resultado para jq :)
Omer van Kloeten

Solução perfeita! Cara, isso é muito útil.
Coderpc

93

Você pode usar o itinterior do shell para iterar nos próximos 20 resultados. Basta digitar itse vir "tem mais" e você verá os próximos 20 itens.


35
oh é realmente sobre como imprimir tudo sem usarit
nonopolarity

15
Obrigado halfdan, você é o dobro do seu nome de usuário e diz!
cassi.lup 9/09/13

6
A idéia não é usar o iterador
Amir Kost

2
Fiz uma votação baixa porque era isso que o OP queria evitar (que é o comportamento padrão).
Crafter

41

Sempre poderia fazer:

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

Para obter essa visão compacta.

Além disso, acho muito útil limitar os campos retornados pela localização, portanto:

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

que retornaria apenas o campo _id e name de foo.


1
Eu gosto desta maneira becase ele pode ser executado em shell script (cliente mongo com --eval)
Zheng Kai

1
@ZhengKai Se você estiver usando um script e não no shell, o shellBatchSize não é relevante, pois seus resultados não serão iterados pelo shell, você precisará fazer isso sozinho.
Asya Kamsky #

O tojson () era exatamente o que eu estava procurando para convertê-lo do DBQuery, obrigado!
Mark Pieszak # Trilon.io 26/10/2015

4

Eu sugiro que você tenha um ~/.mongorc.jsarquivo para não precisar definir o tamanho padrão todas as vezes.

 # 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

Para saber mais sobre o que mais você pode fazer, sugiro que consulte este artigo: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

No shell mongo, se o cursor retornado não for atribuído a uma variável usando a palavra-chave var, o cursor será iterado automaticamente para acessar os 20 primeiros documentos correspondentes à consulta. Você pode definir a variável DBQuery.shellBatchSize para alterar o número de documentos iterados automaticamente.

Referência - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.