MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Les modes d'importation de mongoimport

Lors de l'utilisation de mongoimport pour importer des fichiers dans MongoDB, vous avez la possibilité de spécifier un mode à utiliser. Ces modes déterminent ce qui se passe s'il existe déjà des documents correspondants dans la collection dans laquelle vous essayez d'importer.

Par défaut, mongoimport utilise insert mode, mais il existe d'autres modes que vous pouvez utiliser. Le mode que vous utiliserez dépendra de ce que vous essayez de faire.

Vous trouverez ci-dessous un aperçu de chaque mode ainsi que des exemples.

Les Modes

Les modes d'importation disponibles dans mongoimport sont les suivants :

Mode Description
insert C'est le mode par défaut. Ce mode insère les documents du fichier d'importation. Si un document correspondant existe déjà dans la collection, une erreur se produit. Un document correspondant est celui qui a le même ID unique (comme un _id correspondant champ) en tant que document dans le fichier d'importation.
upsert Remplace les documents existants dans la base de données par des documents correspondants du fichier d'importation. Tous les autres documents sont insérés.
merge Fusionne les documents existants qui correspondent à un document dans le fichier d'importation avec le nouveau document. Tous les autres documents sont insérés.
delete Supprime les documents existants dans la base de données qui correspondent à un document dans le fichier d'importation. Tout document non correspondant n'a aucun effet.

Vous trouverez ci-dessous des exemples du fonctionnement de chaque mode.

Mode Insertion

Supposons que nous ayons une collection appelée pets avec les documents suivants :

{ "_id" :1, "name" :"Wag", "type" :"Chien" }{ "_id" :2, "name" :"Bark", "type" :"Chien" }{ "_id" :3, "name" :"Miaou", "type" :"Chat" }

En fait, ceux-ci ont été importés dans un fichier appelé pets.json .

Imaginons maintenant que nous ayons un autre fichier JSON appelé pets2.json , qui contient les documents JSON suivants :

{ "_id" :1, "weight":40 }{ "_id" :2, "name" :"Bark", "type" :"Chien", "weight":10 }{ "_id" :3, "name" :"Scratch", "type" :"Cat", "weight":5 }{ "_id" :4, "name" :"Bubbles", "type" :"Poisson", "weight" :3 }

Voici ce qui se passe si nous essayons d'importer cela dans nos pets collection tout en utilisant (par défaut) insert mode.

mongoimport --db=PetHotel --collection=pets --file=pets2.json 

Sortie :

2021-01-03T10:07:23.421+1000 connecté à :mongodb://localhost/2021-01-03T10:07:23.422+1000 continue en raison d'une erreur :E11000 collecte d'erreur de clé en double :index PetHotel.pets :_id_ clé dup :{ _id :1 }2021-01-03T10:07:23.422+1000 suite d'une erreur :E11000 collection d'erreurs de clé en double :index PetHotel.pets :_id_ clé dup :{ _id :2 }2021-01-03T10:07 :23.422+1000 suite à une erreur :E11000 collection d'erreurs de clé en double :index PetHotel.pets :_id_ clé dup :{ _id :3 }2021-01-03T10:07:23.423+1000 1 document(s) importé(s) avec succès. Échec de l'importation de 3 documents.

Selon ce message d'erreur, un seul des quatre documents a été importé. Les trois autres ont provoqué une erreur en raison d'une clé en double dans le _id champ.

Regardons maintenant la collection.

db.pets.find() 

Résultat :

{ "_id" :1, "name" :"Wag", "type" :"Chien" }{ "_id" :2, "name" :"Bark", "type" :"Chien" }{ "_id" :3, "name" :"Meow", "type" :"Chat" }{ "_id" :4, "name" :"Bubbles", "type" :"Poisson", "weight" :3 } 

Nous pouvons donc voir que le dernier document a été inséré. Ceci est normal, car nous n'avions pas auparavant de document avec un _id valeur de 4 .

Mode mise à jour

Voici ce qui se passe si nous utilisons upsert mode pour insérer le même document.

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=pets2.json 

Sortie :

2021-01-03T10:19:55.400+1000 connecté à :mongodb://localhost/2021-01-03T10:19:55.444+1000 3 document(s) importé(s) avec succès. 0 document(s) n'ont pas pu être importés.

La sortie nous indique que 3 des 4 documents ont été importés avec succès et qu'il n'y a eu aucun échec.

Vérifions la collection.

db.pets.find() 

Résultat :

{ "_id" :1, "weight" :40 }{ "_id" :2, "name" :"Bark", "type" :"Chien", "weight" :10 }{ "_id" :3, "name" :"Scratch", "type" :"Cat", "weight" :5 }{ "_id" :4, "name" :"Bubbles", "type" :"Poisson", "weight" :3 }

Nous pouvons voir que les trois premiers documents ont été remplacés par les documents du dossier d'importation. Le quatrième document reste le même qu'il était après l'importation précédente.

Notez que le premier document a perdu son name et type des champs. C'est parce que le upsert mode remplace tout le document, et notre document de remplacement n'a que le weight champ (ainsi que le champ _id domaine).

Mode de fusion

Modifions notre pets2.json fichier pour qu'il ressemble à ceci :

{ "_id" :1, "name":"Wag", "type":"Chien" }{ "_id" :2, "name" :"Fetch" }{ "_id" :3, "name " :"Scratch" }{ "_id" :4, "name" :"Bubbles" }{ "_id" :5, "name" :"Hop", "type":"Kangaroo" }

Exécutons maintenant le mongoimport commande à nouveau, mais cette fois dans merge mod :

mongoimport --db=PetHotel --collection=pets --mode=merge --file=pets2.json 

Sortie :

2021-01-03T10:32:33.596+1000 connecté à :mongodb://localhost/2021-01-03T10:32:33.607+1000 3 document(s) importé(s) avec succès. 0 document(s) n'ont pas pu être importés.

Selon la sortie, 3 documents ont été importés.

Jetons un coup d'œil à la collection.

db.pets.find() 

Résultat :

{ "_id" :1, "weight" :40, "name" :"Wag", "type" :"Chien" }{ "_id" :2, "name" :"Fetch", "type" :"Chien", "poids" :10 }{ "_id" :3, "nom" :"Scratch", "type" :"Chat", "poids" :5 }{ "_id" :4, "nom" :"Bubbles", "type" :"Poisson", "weight" :3 }{ "_id" :5, "name" :"Hop", "type" :"Kangourou" }

On voit que les documents 1 et 2 ont été mis à jour et le document 5 a été inséré. Concernant le document 1, le weight champ est resté même si le document d'importation n'incluait pas ce champ. C'est parce que nous avons utilisé merge mode. Si nous avions utilisé upsert mode (comme dans l'exemple précédent), le weight le champ aurait disparu.

Mode Supprimer

Lorsque vous utilisez delete mode, tous les documents correspondants sont simplement supprimés. Les documents non correspondants restent dans la collection.

Voyons donc ce qui se passe lorsque nous importons le même document, mais cette fois-ci, passez à delete mode.

mongoimport --db=PetHotel --collection=pets --mode=delete --file=pets2.json 

Résultat :

2021-01-03T10:39:38.925+1000 connecté à :mongodb://localhost/2021-01-03T10:39:38.926+1000 5 document(s) supprimé(s) avec succès. 0 document(s) n'a pas pu être supprimé.

Les 5 documents de la collection ont été supprimés.

Modifier le ou les champs Upsert

Vous pouvez utiliser le --upsertFields paramètre pour spécifier un champ autre que _id à affronter. Lorsque vous utilisez ce paramètre, transmettez les champs sous forme de liste séparée par des virgules.

Vous ne savez pas si vous avez mongoimport ?

mongoimport fait partie du package MongoDB Database Tools. Les outils de base de données MongoDB sont une suite d'utilitaires de ligne de commande permettant de travailler avec MongoDB.

Si vous n'êtes pas sûr d'avoir les outils de base de données MongoDB/mongoimport installé, essayez d'exécuter la commande suivante dans votre terminal ou invite de commande pour vérifier :

mongoimport --version 

Si vous l'avez, vous devriez voir les informations de version, etc. Si vous ne l'avez pas, vous pouvez utiliser les instructions d'installation sur le site Web de MongoDB pour l'installer sur votre système.

Où exécuter mongoimport Commandes ?

Vous devez exécuter mongoimport commandes à partir de la ligne de commande de votre système (par exemple, un nouveau terminal ou une nouvelle fenêtre d'invite de commande).

Ne les exécutez pas depuis le mongo coquille.