Mongoimport do arquivo json

173

Eu tenho um arquivo json que consiste em cerca de 2000 registros. Cada registro que corresponderá a um documento no banco de dados mongo é formatado da seguinte forma:

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify: new Date("Fri May 11 15:05:42 2012"),
startTime: new Date("Thu May 31 15:59:39 2012"),
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}},

Cada registro está em uma única linha no arquivo JSON, e as únicas quebras de linha estão no final de cada registro. Portanto, cada linha do documento começa com "{jobID:" ... estou tentando importá-las para um banco de dados mongo usando o seguinte comando:

mongoimport --db dbName --collection collectionName --file fileName.json

No entanto, eu recebo o seguinte erro:

Sat Mar  2 01:26:12 Assertion: 10340:Failure parsing JSON string near: ,execModif
0x10059f12b 0x100562d5c 0x100562e9c 0x10025eb98 0x10000e643 0x100010b60 0x10055c4cc 0x1000014b7    
0x100001454 
 0   mongoimport                         0x000000010059f12b _ZN5mongo15printStackTraceERSo + 43
 1   mongoimport                         0x0000000100562d5c _ZN5mongo11msgassertedEiPKc + 204
 2   mongoimport                         0x0000000100562e9c _ZN5mongo11msgassertedEiRKSs + 12
 3   mongoimport                         0x000000010025eb98 _ZN5mongo8fromjsonEPKcPi + 1576
 4   mongoimport                         0x000000010000e643          
                                         _ZN6Import8parseRowEPSiRN5mongo7BSONObjERi + 2739
 5   mongoimport                         0x0000000100010b60 _ZN6Import3runEv + 7376
 6   mongoimport                         0x000000010055c4cc _ZN5mongo4Tool4mainEiPPc + 5436
 7   mongoimport                         0x00000001000014b7 main + 55
 8   mongoimport                         0x0000000100001454 start + 52
Sat Mar  2 01:26:12 exception:BSON representation of supplied JSON is too large: Failure parsing    
    JSON string near: ,execModif
Sat Mar  2 01:26:12 
Sat Mar  2 01:26:12 imported 0 objects
Sat Mar  2 01:26:12 ERROR: encountered 1941 errors

Eu não sei qual é o problema. Alguém pode recomendar uma solução?

amber4478
fonte

Respostas:

301

Consegui corrigir o erro usando a seguinte consulta:

mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray

Espero que isso seja útil para alguém.

amber4478
fonte
28
--jsonArraysendo o bilhete, sim?
Dudo
4
Forma curta disso mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
23818 Adam Faryna
1
às vezes de usuário / senha são necessáriosmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza
Adicionando ao comentário do @ DiegoAndrésDíazEspinoza, que no meu caso eu recebi um erro de "incapaz de autenticar usando o mecanismo 'SCRAM-SHA-1'". Então, depois de uma pesquisa, descobri que falta a palavra-chave authenticationDatabasemencionada na resposta stackoverflow.com/a/58067928/6791222 .
Feroz Khan
61

tente isso,

mongoimport --db dbName --collection collectionName <fileName.json

Exemplo,

mongoimport --db foo --collection myCollections < /Users/file.json
connected to: *.*.*.*
Sat Mar  2 15:01:08 imported 11 objects

O problema ocorre devido ao seu formato de data.

Eu usei o mesmo JSON com data modificada como abaixo e funcionou

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

espero que isto ajude

Srivatsa N
fonte
Tenho o mesmo erro da pergunta ... Verifiquei esta importação?
Denis Nikanorov 02/03
Ajustei as datas como você sugeriu e isso acabou com esse erro específico. No entanto, agora estou recebendo um novo. Aqui está o novo erro:
amber4478 2/13
Você pode colar o novo JSON e em qual versão do Mongo você está?
Srivatsa N
Consegui corrigir o erro adicionando --jsonArray ao final da consulta.
precisa saber é o seguinte
Precisa usar em ""torno do .json, se ele contém o nome da pasta, tem espaços. Respondida por Abhi abaixo Para Por exemplo: Isso não vai funcionar, é necessário adicionar ""ao local do arquivo json para importá-lo. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Isso funciona D:\>mongoimport --db testimport --collection small_zip < "D:\Dev\test test\small_zips.json" 2016-04-17T18:32:34.328+0800 connected to: localhost 2016-04-17T18:32:34.610+0800 imported 200 documents
Abhijeet
22

Usando mongoimport, você pode conseguir o mesmo

mongoimport --db test --collection user --drop --file ~/downloads/user.json

Onde,

test - Database name
user - collection name
user.json - dataset file

--drop é soltar a coleção, se já existir.

KARTHIKEYAN.A
fonte
20

console:

mongoimport -d dbName -c collectionName dataFile.js 
Andrey
fonte
6

Eu usei o comando abaixo para exportar banco de dados

mongodump --db database_name --collection collection_name

e abaixo do comando funcionou para mim importar DB

mongorestore --db database_name path_to_bson_file
Ravi Hirani
fonte
6

Sua sintaxe aparece completamente correta em:

mongoimport --db dbName --collection collectionName --file fileName.json

Verifique se você está na pasta correta ou forneça o caminho completo.

Robert Grutza
fonte
3

Execute o comando import em outro terminal. (não dentro do mongo shell.)

mongoimport --db test --collection user --drop --file ~/downloads/user.json
Nija I Pillai
fonte
3

No Windows, você pode usar o Command Prompcmd cmd; no Ubuntu, você pode terminaldigitar o seguinte comando:

mongoimport  -d  your_database_name  -c  your_collection_name  /path_to_json_file/json_file_name.json

quando você abrir o shell do mongo, verificará o nome do banco de dados ao executar este comando:

show databases
Noha Salah
fonte
2

Este comando funciona onde nenhuma coleção é especificada.

mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json"

Shell Mongo após executar o comando

connected to: 127.0.0.1
no collection specified!
using filename 'zips' as collection.
2014-09-16T13:56:07.147-0400 check 9 29353
2014-09-16T13:56:07.148-0400 imported 29353 objects
Abhi
fonte
1

Eu tentei algo assim e ele realmente funciona:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json
tyne
fonte
1

Isso funciona comigo quando db com nome de usuário e senha

mongoimport --db YOUR_DB --collection MyCollection --file /your_path/my_json_file.json -u my_user -p my_pass

db sem senha de nome de usuário, remova -u my_user -p my_pass

Minha amostra json

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}
Rahul Mahadik
fonte
1

Solução:-

mongoimport --db databaseName --collection tableName --file filepath.json

Exemplo:-

Coloque seu arquivo na pasta admin: -

C:\Users\admin\tourdb\places.json

Execute este comando no seu teminal: -

mongoimport --db tourdb --collection places --file ~/tourdb/places.json

Resultado:-

admin@admin-PC MINGW64 /
$ mongoimport --db tourdb --collection places --file ~/tourdb/places.json
2019-08-26T14:30:09.350+0530 connected to: localhost
2019-08-26T14:30:09.447+0530 imported 10 documents

Para mais link

Parveen Chauhan
fonte
1
  1. Basta copiar o caminho do arquivo json como o exemplo "C: \ persons.json"
  2. vá para C: \ Arquivos de programas \ MongoDB \ Server \ 4.2 \ bin
  3. abra o cmd nessa pasta bin do mongodb e execute este comando

mongoimport --jsonArray --db dbname - collection collectionName - file FilePath

exemplo mongoimport --jsonArray --db learnmongo --collection people --file C: \ persons.json

Hrishikesh Baidya
fonte
0

Se você tentar exportar esta coleção de teste:

> db.test.find()
{ "_id" : ObjectId("5131c2bbfcb94ddb2549d501"), "field" : "Sat Mar 02 2013 13:13:31 GMT+0400"}
{"_id" : ObjectId("5131c2d8fcb94ddb2549d502"), "field" : ISODate("2012-05-31T11:59:39Z")}

com mongoexport (a primeira data criada com Date(...)e a segunda criada com new Date(...)(se o uso ISODate(...)for o mesmo que na segunda linha)), portanto a saída mongoexport será assim:

{ "_id" : { "$oid" : "5131c2bbfcb94ddb2549d501" }, "field" : "Sat Mar 02 2013 13:13:31 GMT+0400" }
{ "_id" : { "$oid" : "5131c2d8fcb94ddb2549d502" }, "field" : { "$date" : 1338465579000 } }

Portanto, você deve usar a mesma notação, porque JSON estrito não tem tipo Date( <date> ).

Seu JSON também não é válido: o nome de todos os campos deve estar entre aspas duplas, mas o mongoimport funciona bem sem eles.

Você pode encontrar informações adicionais na documentação do mongodb e aqui .

Denis Nikanorov
fonte
Ajustei as datas como você sugeriu e isso acabou com esse erro específico. No entanto, agora estou recebendo um novo. Aqui está o novo erro: 'Sat 2 de março 15:22:07 exceção: a representação BSON do JSON fornecido é muito grande: Falha ao analisar a seqüência JSON próxima: data: "1949 sáb 2 de março 15:22:07 sáb 2 de março 15:22 : 07 importados 0 objetos Sáb 2 de março 15:22:07 ERRO: encontrado 34763 erros '
amber4478 2/13
Eu acho que é outro erro repetido para camposizeT:{data: "1949..."}}
Denis Nikanorov 03/03
0

Um pouco atrasado para uma resposta provável, pode ajudar novas pessoas. Caso você tenha várias instâncias do banco de dados:

mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name>  --file <path_to_dump_file> -u <my_user> -p <my_pass>

Supondo que as credenciais sejam necessárias, remova essa opção.

coolmego
fonte
0

Número de respostas foram dadas, embora eu gostaria de dar o meu comando. Eu costumava frequentemente. Pode ajudar a alguém.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
Pramod Kharade
fonte