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

Comment supprimer des documents MongoDB en important un fichier

Depuis mongoimport version 100.0.0, vous pouvez supprimer des documents dans MongoDB en fonction d'un fichier importé. Pour ce faire, utilisez delete mode.

Lorsque vous utilisez delete mode, si un document importé a le même _id comme une valeur existante dans la collection dans laquelle vous importez, le document existant sera supprimé.

Vous pouvez également spécifier un ou plusieurs autres champs (autres que le _id champ) pour être le champ correspondant si nécessaire.

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", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :"Chien", "poids" :10 }{ "_id" :3, "nom" :"Miaou", "type" :"Chat", "poids" :7 }{ "_id" :4, "nom" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 } 

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

{"_id":1,"name":"Wag","type":"Chien"}{"_id":2,"name":"Fluffy","type":"Chat"," weight":10}{"_id":9,"name":"Hop","type":"Kangourou","weight":60}

La commande suivante importe le fichier JSON à l'aide de delete mode :

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

L'exécution de cette commande supprime tous les documents correspondants dans la collection.

Vérifiez les résultats

Jetons un coup d'œil à la collection maintenant.

db.pets.find() 

Résultat :

{ "_id" :3, "name" :"Meow", "type" :"Chat", "weight" :7 }{ "_id" :4, "name" :"Scratch", "type" :"Chat", "poids" :8 }{ "_id" :5, "nom" :"Bruce", "type" :"Chauve-souris", "poids" :3 }

On voit que les 2 premiers documents ont été supprimés. Ils ont été supprimés car leur _id les valeurs correspondaient au _id valeurs dans les documents existants. Ceci malgré d'autres détails qui ne correspondent pas nécessairement (comme avec le document 2).

De plus, notre fichier importé avait un document avec un _id de 9 mais il n'y avait pas de document correspondant, et donc rien n'a été supprimé pour celui-là.

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 plusieurs champs avec ce paramètre, transmettez-les sous forme de liste séparée par des virgules.

Supposons que nous ayons un autre fichier JSON appelé pets2.json et ça ressemble à ça :

{ "name" :"Meow", "type" :"Chat", "weight" :7 }{ "name" :"Bubbles", "type" :"Poisson", "weight" :3 } 

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

Maintenant, vérifions à nouveau la collection :

db.pets.find() 

Résultat :

{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Chauve-souris", "poids" :3 }

Meow le chat a été supprimé car cet animal existait à la fois dans la collection MongoDB et dans le document importé.

Bubbles le poisson n'avait pas de document correspondant et donc rien n'a été supprimé pour celui-là.

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.