Como exportar JSON do MongoDB usando Robomongo


108

Portanto, não sei muito sobre MongoDB. Tenho RoboMongousando o qual me conecto a um MongoDB. O que preciso fazer é o seguinte - há uma coleção nesse MongoDB. Quero exportar os dados dessa coleção para salvá-los em um arquivo.

Usei a interface para abrir os dados da coleção como texto e fiz um Ctrl+ Ae colei em um arquivo de texto. No entanto, descobri que nem todos os dados são copiados e também que havia muitos comentários nos dados de texto que quebram naturalmente o JSON.

Gostaria de saber se o RoboMongo tem uma Export As JSONinstalação para que eu possa fazer uma exportação limpa.

Quaisquer dicas são apreciadas!


Você deseja exportar coleções específicas ou banco de dados completo?
— Ramesh Murugesan

1
Este não é um recurso atual do Robomongo, mas adicionei uma sugestão de recurso na fila de problemas do github: Adicionar exportação JSON . Há uma sugestão geral de que a importação / exportação deve ser integrada , mas casos de uso mais detalhados / práticos seriam úteis. Por exemplo, isso deve suportar a exportação de JSON de uma coleção, uma consulta de localização, um pipeline de agregação? Atualmente, sua melhor opção é usar a mongoexportferramenta de linha de comando padrão .
— Stennie

1
@Stennie - obrigado pelo seu comentário. Acho que em resposta à sua pergunta - do ponto de vista da experiência do cliente, isso realmente não importa. Na maioria das outras interfaces de banco de dados, o fluxo é que você execute uma consulta (com ou sem critérios), obtenha um conjunto de resultados. Clique com o botão direito e diga "exportar resultados como ..." Portanto, o mesmo deve ser aplicável aqui. Não importa se estou exportando uma coleção inteira ou uma consulta de pesquisa. Se o resultado puder ser exibido no painel, ele deve ser exportável.
— Variável indefinida

1
Simplesmente você pode fazer issomongoexport --uri='mongodb://someUser@mongodb0.example.com:27017/marketing' --collection=contacts --out=contacts.json
— Naren

Respostas:


63

Você pode usar tojsonpara converter cada registro em JSON em um script de shell do MongoDB .

Execute este script no RoboMongo:

var cursor = db.getCollection('foo').find({}, {});
while(cursor.hasNext()) {
    print(tojson(cursor.next()))
}

Isso imprime todos os resultados como uma matriz do tipo JSON.

O resultado não é realmente JSON! Alguns tipos, como datas e IDs de objeto, são impressos como chamadas de função JavaScript, por exemplo ISODate("2016-03-03T12:15:49.996Z"),.

Pode não ser muito eficiente para grandes conjuntos de resultados, mas você pode limitar a consulta. Alternativamente, você pode usar mongoexport.


3
A saída não é json válida. Apenas registros serializados em JSON um por um
— ruX

Para muitos casos de uso, pode-se usar tojson(db.getCollection(...).find(...)["_batch"])para produzir a totalidade do lote atual obtido do servidor.
— Yuval

@Yuval Você quer dizer literalmente ["_batch"]? Você pode dar um exemplo de como usar isso? Tentei fazer isso com o Robo 3T 1.2.1, mas só diz "Script executado com sucesso, mas não há resultados para mostrar".
— Florian Winter

7
@FlorianWinter Isso foi apenas de descobertas aleatórias de mexer por aí. A melhor solução é tojson(db.getCollection(...).find(...).toArray()).
— Yuval

@Yuval Nice! Essa é a solução mais fácil então, muito melhor que a minha. Considere postar como uma resposta. (Ou editar o meu, mas então eu receberia todo o crédito que você merece, o que seria um tanto injusto ...)
— Florian Winter

58

Uma maneira rápida e suja: Basta escrever sua consulta como db.getCollection('collection').find({}).toArray()e clicar com o botão direito Copy JSON. Cole os dados no editor de sua escolha.

insira a descrição da imagem aqui


4
Arrumado! Nada sujo, considerando a falta de funcionalidade de exportação no robo3t. Muito mais fácil para pequenos conjuntos de dados em comparação com outras soluções sugeridas.
— Ilya Luzyanin

30

A funcionalidade do shell do Robomongo resolverá o problema. No meu caso, eu precisava de algumas colunas no formato CSV.

var cursor = db.getCollection('Member_details').find({Category: 'CUST'},{CustomerId :1,Name :1,_id:0})

while (cursor.hasNext()) {
    var record = cursor.next();   
    print(record.CustomerID + "," + record.Name)
}

Output : -------

334, Harison
433, Rechard
453, Michel
533, Pal

1
É possível escrever a saída deste script em um csv localmente dentro do shell Robomongo?
— xxxvincxxx

Isso me dá "Script executado com sucesso, mas não há resultados para mostrar"
— Shanika Ediriweera

Erro: Linha 10: Lado esquerdo inválido na atribuição
— Eugen Sunic

19

Existem algumas GUIs do MongoDB por aí, algumas delas com suporte integrado para exportação de dados. Você encontrará uma lista abrangente de GUIs do MongoDB em http://mongodb-tools.com

Você perguntou sobre a exportação dos resultados da sua consulta, e não sobre a exportação de coleções inteiras. Experimente o 3T MongoChef MongoDB GUI , esta ferramenta tem suporte para seu caso de uso específico.


O Studio 3T fez o trabalho mais facilmente do que o esperado! : +1:
— vinyll de

16

você diz "exportar para arquivo" como em uma planilha? gosta de um .csv?

IMO, esta é a maneira MAIS FÁCIL de fazer isso no Robo 3T (antigo robomongo):

  1. No canto superior direito da GUI do Robo 3T há um botão "Exibir resultados em modo de texto", clique nele e copie tudo

  2. cole tudo neste site: https://json-csv.com/

  3. clique no botão de download e agora você tem em uma planilha.

espero que isso ajude alguém, pois eu gostaria que o Robo 3T tivesse recursos de exportação


Muito simples, obrigado
— Tính Ngô Quang

11

Não execute este comando no shell, insira este script em um prompt de comando com seu nome de banco de dados, nome de coleção e nome de arquivo, todos substituindo os marcadores de posição.

mongoexport --db (Database name) --collection (Collection Name) --out (File name).json

Funciona para mim.



5

Ampliando a resposta de Anish, eu queria algo que pudesse aplicar a qualquer consulta para gerar automaticamente todos os campos em vez de defini-los na instrução de impressão. Provavelmente pode ser simplificado, mas foi algo rápido e sujo que funciona muito bem:

var cursor = db.getCollection('foo').find({}, {bar: 1, baz: 1, created_at: 1, updated_at: 1}).sort({created_at: -1, updated_at: -1});

while (cursor.hasNext()) {
    var record = cursor.next();
    var output = "";
    for (var i in record) {
      output += record[i] + ",";
    };
    output = output.substring(0, output.length - 1);
    print(output);
}

4

Se quiser usar o mongoimport , você desejará exportar desta forma:

db.getCollection('tables')
  .find({_id: 'q3hrnnoKu2mnCL7kE'})
  .forEach(function(x){printjsononeline(x)});

2

Usando um script de shell robomongo:

//on the same db
var cursor = db.collectionname.find();

while (cursor.hasNext()) {
    var record = cursor.next();   
    db.new_collectionname.save(record);
}

Usando o comando de exportação e importação do mongodb

Você pode adicionar o --jsonArrayparâmetro / sinalizador ao seumongoexport comando, isso exporta o resultado como um único array json.

Em seguida, basta especificar o --jsonArraysinalizador novamente ao importar.

Ou remova os colchetes iniciais e finais do array [] no arquivo, então seu arquivo modificado e exportado será importado com o mongoimportcomando sem a --jsonArraybandeira.

Mais sobre Exportar aqui: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

Importe aqui: https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray


1

Eu tive esse mesmo problema, e a execução do script no robomongo (Robo 3T 1.1.1) também não permite copiar valores e também não havia opção de exportação. A melhor maneira de conseguir isso é usar o mongoexport, se o mongodb estiver instalado em seu local, você pode usar o mongoexport para se conectar ao banco de dados em qualquer servidor e extrair dados

Para se conectar a dados no servidor remoto e arquivo de saída csv, execute o seguinte mongoexport em sua linha de comando

mongoexport --host HOSTNAME --port PORT --username USERNAME --password "PASSWORD" --collection COLLECTION_NAME --db DATABASE_NAME --out OUTPUTFILE.csv --type=csv --fieldFile fields.txt

fieldFile: ajuda a extrair as colunas desejadas, ex: o conteúdo do fields.txt pode ser apenas:

ID do usuário

para extrair apenas valores da coluna 'userId'

Dados no servidor remoto, arquivo de saída json:

mongoexport --host HOST_NAME --port PORT --username USERNAME --password "PASSWORD" --collection COLECTION_NAME --db DATABASE_NAME --out OUTPUT.json

isto extrai todos os campos para o arquivo json

dados no localhost (mongodb deve estar em execução no localhost)

mongoexport --db DATABASE_NAME --collection COLLECTION --out OUTPUT.json

Referência: https://docs.mongodb.com/manual/reference/program/mongoexport/#use


1

Solução:

mongoexport --db test --collection traffic --out traffic.json<br><br>

insira a descrição da imagem aqui

Onde:
banco de dados ->
nome da coleção do servidor mock ->
nome do arquivo de saída api_defs -> childChoreRequest.json


1

Uma extensão da resposta Florian Winter para pessoas que procuram gerar uma consulta pronta para executar.

drope insertManyconsulta usando cursor:

{
    // collection name
    var collection_name = 'foo';

    // query
    var cursor = db.getCollection(collection_name).find({});

    // drop collection and insert script
    print('db.' + collection_name + '.drop();');
    print('db.' + collection_name + '.insertMany([');

    // print documents
    while(cursor.hasNext()) {
        print(tojson(cursor.next()));

        if (cursor.hasNext()) // add trailing "," if not last item
            print(',');
    }

    // end script
    print(']);');
}

Sua saída será como:

db.foo.drop();
db.foo.insertMany([
{
    "_id" : ObjectId("abc"),
    "name" : "foo"
}
,
{
    "_id" : ObjectId("xyz"),
    "name" : "bar"
}
]);

0
  1. faça sua busca
  2. botão para ver os resultados no modo JSON
  3. copie o resultado para o word
  4. imprimir o resultado da palavra

Quando tenho datas em meu documento, ele retorna elementos ISODate que não são o formato json válido.
— Constantino Cronemberger

1
Por que você usaria um documento do Word para armazenar uma exportação de banco de dados? E por que alguém iria querer imprimir uma exportação de banco de dados?
— maesk 01 de

@maesk 🤣🤣🤣🤣
— Charlie Schliesser
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.