2017-06-17 2 views
1

J'ai exécuté une commande mongo import pour importer mon fichier json, mais toutes les données ont été sauvegardées sous un seul objet.L'importation Mongo enregistre toutes les données sous un même objet

mongoimport -d DB NAME -c COLLECTION NAME --type json --file FILE PATH --host MY MONGO LAB HOST --port 27892 -u MYUSER -p MYPASSWORD 

Mais maintenant, quand je vois le db dans mongorobot

JSON

{ 
"-Kbr7KouYOL_a9NIAyPV" : { 
"correctas" : [ 1 ], 
"creator_name" : "kk", 
"game_name" : "Elrubius", 
"jugado" : 62, 
"opciones1" : [ "Por usar una pistola falsa" ], 
"opciones2" : [ "Por matar" ], 
"opciones3" : [ "Por robar" ], 
"opciones4" : [ "Por estar tomando alcol" ], 
"preguntas" : [ "Elrubius porque fue detenido" ], 
"premium" : false 
}, 
"-Kbr8RJMSCv95m6TS4Of" : { 
"correctas" : [ 2 ], 
"creator_name" : "CRIATURITA", 
"game_name" : "ELRUBIOSOMG", 
"jugado" : 34, 
"opciones1" : [ "Carlos" ], 
"opciones2" : [ "Ruben" ], 
"opciones3" : [ "Jorge" ], 
"opciones4" : [ "Chavez" ], 
"preguntas" : [ "Como se llama elrubiusomg?" ], 
"premium" : false 
}, 
  • est erroné de stocker toutes les données sous un seul objet?
  • Comment puis-je éviter cela?

Merci

+0

Voulez-vous dire le fichier json que j'importe? Je l'ai déjà ajouté (; –

Répondre

1

Le problème est que vous avez combiné les documents en un seul document.

Votre mise en forme (indentation) cache ce que vous faites. Mais ... c'est ce que vous utilisez, dans votre question (avec certaines propriétés enlevées par souci de concision):

{ 
    "-Kbr7KouYOL_a9NIAyPV": { 
     "creator_name": "kk", 
     "game_name": "Elrubius", 
     "jugado": 62, 
     "premium": false 
    }, 
    "-Kbr8RJMSCv95m6TS4Of": { 
     "creator_name": "CRIATURITA", 
     "game_name": "ELRUBIOSOMG", 
     "jugado": 34, 
     "premium": false 
    } 
} 

Cela va juste vous donner un seul document géant avec beaucoup de sous-documents. Et finalement, vous dépasserez la taille d'un seul document.

De plus, la façon dont vous avez construit votre JSON, il est la création de noms de propriétés uniques pour chaque document:

  • -Kbr7KouYOL_a9NIAyPV
  • -Kbr8RJMSCv95m6TS4Of

Je doute que c'était votre intention; vous ne serez jamais capable d'interroger à travers cela, puisque chaque document a un nom de propriété unique.

Vous devez corriger votre fichier JSON pour représenter plusieurs documents distincts. Et corrige cet identifiant unique afin qu'il soit interrogeable. Quelque chose comme:

{ 
    "id": "-Kbr7KouYOL_a9NIAyPV", 
    "creator_name": "kk", 
    "game_name": "Elrubius", 
    "jugado": 62, 
    "premium": false 
} 
{ 
    "id": "-Kbr8RJMSCv95m6TS4Of", 
    "creator_name": "CRIATURITA", 
    "game_name": "ELRUBIOSOMG", 
    "jugado": 34, 
    "premium": false 
} 

Vous pouvez ensuite importer cet ensemble de documents.

Notez que, dans mon exemple, j'ai ajouté une propriété id. MongoDB crée une propriété unique _id si vous n'en spécifiez pas. Ainsi, si vous souhaitez remplacer la propriété unique garantie de MongoDB, vous pouvez remplacer id par _id dans l'exemple ci-dessus.

+0

Je sais qu'il est un peu tard, mais quand j'essaie de faire une importation avec une syntaxe comme ça, ça me lance Echec du traitement des erreurs document # 1 caractère invalide {recherche de début de chaîne de clé d'objet –

+0

Vous pouvez également essayer d'envelopper tous les documents du fichier d'importation entre parenthèses: '[{doc1}, {doc2} ...]' Remarque: je viens de prendre l'exemple de document exact dans mon répondre et l'importer via mongoimport, sans problèmes –

+0

Je mettais dans la commande le mauvais fichier, merci pour la réponse rapide –