Mongoimport du fichier json


173

J'ai un fichier json composé d'environ 2000 enregistrements. Chaque enregistrement qui correspondra à un document de la base de données mongo est formaté comme suit:

{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"}},

Chaque enregistrement est sur une seule ligne dans le fichier JSON, et les seuls sauts de ligne se trouvent à la fin de chaque enregistrement. Par conséquent, chaque ligne du document commence par "{jobID:" ... J'essaie de les importer dans une base de données mongo en utilisant la commande suivante:

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

Cependant, j'obtiens l'erreur suivante:

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

Je ne sais pas quel est le problème. Quelqu'un peut-il recommander une solution?

Réponses:


301

J'ai pu corriger l'erreur à l'aide de la requête suivante:

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

Espérons que cela soit utile à quelqu'un.


28
--jsonArrayétant le ticket, oui?
Dudo

4
Forme courte de ceci mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json.
Adam Faryna

1
parfois un utilisateur / mot de passe est requismongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
Diego Andrés Díaz Espinoza

Ajout au commentaire de @ DiegoAndrésDíazEspinoza, que dans mon cas, j'ai eu une erreur de "impossible de s'authentifier à l'aide du mécanisme 'SCRAM-SHA-1'". Donc, après une recherche, j'ai trouvé qu'il manquait le mot-clé authenticationDatabasecomme mentionné dans la réponse stackoverflow.com/a/58067928/6791222 .
Feroz Khan

61

essaye ça,

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

Exemple,

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

Le problème est dû à votre format de date.

J'ai utilisé le même JSON avec la date modifiée ci-dessous et cela a fonctionné

{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"}}

J'espère que cela t'aides


J'ai la même erreur que dans la question ... Avez-vous vérifié cette importation?
Denis Nikanorov

J'ai ajusté les dates comme vous l'avez suggéré et cela a éliminé cette erreur particulière. Cependant, maintenant j'en reçois un nouveau. Voici la nouvelle erreur:
amber4478

Pouvez-vous coller le nouveau JSON et quelle version de Mongo vous utilisez?
Srivatsa N

J'ai pu corriger l'erreur en ajoutant --jsonArray à la fin de la requête.
amber4478

Besoin d'utiliser ""autour du .json, s'il contient le nom du dossier contient des espaces. Répondu par Abhi ci-dessous Par exemple, cela ne fonctionnera pas, vous devez ajouter ""à l'emplacement du fichier json pour l'importer. D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. Cela fonctionne 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

En utilisant mongoimport, vous pouvez obtenir la même chose

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

où,

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

--drop est de supprimer la collection si elle existe déjà.


20

console:

mongoimport -d dbName -c collectionName dataFile.js 

6

J'ai utilisé la commande ci-dessous pour exporter la base de données

mongodump --db database_name --collection collection_name

et ci-dessous la commande a fonctionné pour moi pour importer DB

mongorestore --db database_name path_to_bson_file

6

Votre syntaxe semble tout à fait correcte dans:

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

Assurez-vous que vous vous trouvez dans le bon dossier ou indiquez le chemin complet.


3

Exécutez la commande d'importation dans un autre terminal. (pas à l'intérieur de la coque mongo.)

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

3

Dans Windows, vous pouvez utiliser votre Command Prompcmd cmd, dans Ubuntu, vous pouvez utiliser votre terminalen tapant la commande suivante:

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

puis lorsque vous ouvrez votre shell mongo, vous trouverez pour vérifier votre nom_basededonnées lors de l'exécution de cette commande:

show databases

2

Cette commande fonctionne lorsqu'aucune collection n'est spécifiée.

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

Mongo shell après avoir exécuté la commande

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

1

J'ai essayé quelque chose comme ça et ça marche vraiment:

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

1

Cela fonctionne avec moi lorsque db avec nom d'utilisateur et mot de passe

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

db sans nom d'utilisateur mot de passe veuillez supprimer -u my_user -p my_pass

Mon échantillon json

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

1

Solution:-

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

Exemple:-

Placez votre fichier dans le dossier admin: -

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

Exécutez cette commande sur votre teminal: -

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

Production:-

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

Pour plus de lien


1
  1. Copiez simplement le chemin du fichier json comme dans l'exemple "C: \ persons.json"
  2. allez dans C: \ Program Files \ MongoDB \ Server \ 4.2 \ bin
  3. ouvrez cmd sur ce dossier bin mongodb et exécutez cette commande

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

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


0

Si vous essayez d'exporter cette collection de test:

> 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")}

avec mongoexport (la première date créée avec Date(...)et la seconde créée avec new Date(...)(si l'utilisation ISODate(...)sera la même que dans la deuxième ligne)) donc la sortie de mongoexport ressemblera à ceci:

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

Vous devriez donc utiliser la même notation, car le JSON strict n'a pas de type Date( <date> ).

De plus, votre JSON n'est pas valide: le nom de tous les champs doit être entre guillemets, mais mongoimport fonctionne bien sans eux.

Vous pouvez trouver des informations supplémentaires dans la documentation de mongodb et ici .


J'ai ajusté les dates comme vous l'avez suggéré et cela a éliminé cette erreur particulière. Cependant, maintenant j'en reçois un nouveau. Voici la nouvelle erreur: 'Sat Mar 2 15:22:07 exception: La représentation BSON du JSON fourni est trop grande: Échec de l'analyse de la chaîne JSON près de: data: "1949 Sat Mar 2 15:22:07 Sat Mar 2 15:22 : 07 importé 0 objets Sam 2 mars 15:22:07 ERREUR: rencontré 34763 erreurs '
amber4478

Je pense que c'est une autre erreur sur le terrainsizeT:{data: "1949..."}}
Denis Nikanorov

0

Un peu tard pour la réponse probable, pourrait aider de nouvelles personnes. Si vous avez plusieurs instances de base de données:

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

En supposant que les informations d'identification sont nécessaires, sinon supprimez cette option.


0

Le nombre de réponses a été donné même si je voudrais donner mon ordre. J'avais l'habitude de le faire fréquemment. Cela peut aider quelqu'un.

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.