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 lename
ettype
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.