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

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

Lorsque vous utilisez mongoimport pour importer des fichiers dans MongoDB, vous avez la possibilité de fusionner des documents existants avec ceux que vous importez.

Dans ce cas, si un document importé a le même _id comme un document existant dans la collection dans laquelle vous importez, le document existant sera fusionné avec 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.

Lorsque vous fusionnez des documents, le document résultant combinera les données existantes avec toutes les nouvelles données contenues dans le fichier importé. Toutes les données qui sont les mêmes resteront les mêmes. Toute donnée en conflit entraînera l'écrasement des données du fichier importé par rapport aux données existantes. Si un document importé ne contient pas de champ qui se trouve dans le document correspondant dans la collection MongoDB, alors ce champ restera inchangé dans la collection (c'est-à-dire qu'il ne sera ni supprimé ni modifié).

La façon de fusionner des documents avec mongoimport est d'utiliser merge 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" :"Chien" }{ "_id" :2, "name" :"Bark", "type" :"Chien" }{ "_id" :3, "name" :"Miaou", "type" :"Chat" }

Et nous avons le fichier JSON suivant appelé pets.json :

{"_id":2.0,"name":"Fetch","type":"Chien","weight":40.0}{"_id":3.0,"weight":10.0}{"_id":4.0,"name":"Hop","type":"Kangourou","weight":60.0}

La commande suivante importe le fichier JSON dans la collection :

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

Cela utilise merge mode pour fusionner les documents correspondants avec 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" :"Chien" }{ "_id" :2, "name" :"Fetch", "type" :"Chien", " weight" :40 }{ "_id" :3, "name" :"Meow", "type" :"Chat", "weight" :10 }{ "_id" :4, "name" :"Hop", " type" :"Kangourou", "poids" :60 }

Nous pouvons voir que le document 1 est inchangé, le document 2 a vu son champ de nom changé en Fetch , et il a également eu un weight champ ajouté.. Le document 3 a également eu un champ de pondération ajouté et le document 4 a été inséré.

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.

Supposons que nous ayons un autre fichier JSON appelé pets2.json que nous voulons importer, et il ressemble à ceci :

{"name":"Wag","type":"Chien","weight":20.0,"gooddog":true}{"name":"Bubbles","type":"Poisson"} 

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=merge --upsertFields=name,type --file=data/pets2.json 

Maintenant, vérifions à nouveau la collection :

db.pets.find() 

Résultat :

{ "_id" :1, "name" :"Wag", "type" :"Chien", "gooddog" :true, "weight" :20 }{ "_id" :2, "name" :" Fetch", "type" :"Chien", "weight" :40 }{ "_id" :3, "name" :"Meow", "type" :"Cat", "weight" :10 }{ "_id" :4, "name" :"Hop", "type" :"Kangourou", "weight" :60 }{ "_id" :ObjectId("5ff0548dd991410169412300"), "name" :"Bubbles", "type" :" Poisson" }

Nous pouvons voir que Wag a été mis à jour (mais le _id la valeur reste la même).

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.