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 de4
.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
ettype
des champs. C'est parce que leupsert
mode remplace tout le document, et notre document de remplacement n'a que leweight
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 dansmerge
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), leweight
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.