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

Comment remplacer des documents existants lors de l'importation d'un fichier dans MongoDB

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.