Lorsque vous utilisez mongoimport
pour importer des fichiers dans MongoDB, vous avez la possibilité de remplacer les documents existants qui correspondent à ceux que vous importez.
J'entends par là, si un document importé a le même _id
comme un document existant dans la collection dans laquelle vous importez, le document existant sera remplacé par celui en cours d'importation.
Vous pouvez également spécifier un autre champ (autre que le _id
champ) pour être le champ correspondant si nécessaire.
La façon de remplacer les documents existants lors de l'utilisation de mongoimport
est d'utiliser upsert
mode.
Exemple
Supposons que nous ayons une collection appelée pets
qui contiennent les documents suivants :
db.pets.find()
Résultat :
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
Et nous avons le fichier JSON suivant appelé pets.json
:
{"_id":2,"name":"Fetch","type":"Dog"} {"_id":3,"name":"Scratch","type":"Cat","weight":10} {"_id":4,"name":"Hop","type":"Kangaroo","weight":60}
La commande suivante importe le fichier JSON dans la collection :
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Cela utilise upsert
mode pour remplacer les documents correspondants par ceux importés.
Vérifiez les résultats
Jetons un coup d'œil à la collection maintenant.
db.pets.find()
Résultat :
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog" } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
On voit que le document 2 a été complètement remplacé. Le chien Bark
a été remplacé par le chien Fetch
, et aucun poids n'est enregistré pour Fetch
.
Le document 3 a également été remplacé et le document 4 est un tout nouveau document.
Modifier le ou les champs Upsert
Vous pouvez utiliser le --upsertFields
paramètre pour spécifier un champ autre que _id
pour lequel s'affronter. Lorsque vous utilisez ce paramètre, transmettez les champs sous forme de liste séparée par des virgules.
Supposons que nous ayons un autre fichier JSON appelé pets2.json
que nous voulons importer, et il ressemble à ceci :
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
Ce document n'inclut pas le _id
champ, nous aurions donc besoin de faire correspondre avec d'autres champs qui identifient de manière unique chaque document. Dans ce cas, nous pourrions utiliser le name
et type
des champs.
On peut donc utiliser le mongoimport
suivant commande :
mongoimport --db=PetHotel --collection=pets --mode=upsert --upsertFields=name,type --file=data/pets2.json
Maintenant, vérifions à nouveau la collection :
db.pets.find()
Résultat :
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true } { "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }
Nous pouvons voir que Fetch a été mis à jour/remplacé (mais le _id
la valeur reste la même). Idem avec Scratch.
Les bulles, d'autre part, n'avaient pas de correspondance pour les champs upsert et ont donc été insérées.
Vérifiez 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 les commandes ?
N'oubliez pas, vous devez exécuter mongoimport
commandes à partir de la ligne de commande de votre système (par exemple, un nouveau terminal ou une fenêtre d'invite de commande).
Ne les exécutez pas depuis le mongo
coquille.