Vanaf mongoimport
versie 100.0.0, kunt u documenten in MongoDB verwijderen op basis van een geïmporteerd bestand. Gebruik hiervoor delete
modus.
Wanneer je delete
gebruikt modus, als een geïmporteerd document dezelfde _id
. heeft waarde als een bestaande waarde in de verzameling waarin u importeert, wordt het bestaande document verwijderd.
U kunt ook een ander veld of velden specificeren (anders dan de _id
veld) om indien nodig het overeenkomende veld te zijn.
Voorbeeld
Stel dat we een verzameling hebben met de naam pets
die de volgende documenten bevatten:
db.pets.find()
Resultaat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
En we hebben het volgende JSON-bestand genaamd pets.json
:
{"_id":1,"name":"Wag","type":"Dog"} {"_id":2,"name":"Fluffy","type":"Cat","weight":10} {"_id":9,"name":"Hop","type":"Kangaroo","weight":60}
De volgende opdracht importeert het JSON-bestand met delete
modus:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json
Als u deze opdracht uitvoert, worden alle overeenkomende documenten in de verzameling verwijderd.
Controleer de resultaten
Laten we de collectie nu eens bekijken.
db.pets.find()
Resultaat:
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 } { "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
We kunnen zien dat de eerste 2 documenten zijn verwijderd. Ze zijn verwijderd omdat hun _id
waarden kwamen overeen met de _id
waarden in de bestaande documenten. Dit is ondanks andere details die niet noodzakelijk overeenkomen (zoals bij document 2).
Ons geïmporteerde bestand had ook een document met een _id
van 9 maar er was geen overeenkomend document, en dus werd er niets voor verwijderd.
De Upsert-veld(en) wijzigen
U kunt de --upsertFields
. gebruiken parameter om een ander veld dan _id
op te geven om tegen te matchen. Als u meerdere velden met deze parameter gebruikt, geef ze dan door als een door komma's gescheiden lijst.
Stel dat we een ander JSON-bestand hebben met de naam pets2.json
en het ziet er zo uit:
{ "name" : "Meow", "type" : "Cat", "weight" : 7 } { "name" : "Bubbles", "type" : "Fish", "weight" : 3 }
Dit document bevat niet de _id
veld, dus we zouden moeten vergelijken met andere velden die elk document op unieke wijze identificeren. In dit geval zouden we de name
. kunnen gebruiken en type
velden.
We kunnen daarom de volgende mongoimport
. gebruiken commando:
mongoimport --db=PetHotel --collection=pets --mode=delete --upsertFields=name,type --file=data/pets2.json
Laten we nu de collectie nog eens bekijken:
db.pets.find()
Resultaat:
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 } { "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
Miauw, de kat is verwijderd omdat dat huisdier zowel in de MongoDB-verzameling als in het geïmporteerde document bestond.
Bubbles de vis had geen overeenkomend document en dus is er niets voor verwijderd.
Controleer op mongoimport
mongoimport
maakt deel uit van het MongoDB Database Tools-pakket. De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.
Als u niet zeker weet of u over de MongoDB Database Tools/mongoimport
beschikt geïnstalleerd, probeer dan het volgende commando in je Terminal of Command Prompt uit te voeren om te controleren:
mongoimport --version
Als je het hebt, zou je versie-informatie, enz. moeten zien. Als je het niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om het op je systeem te installeren.
Waar moeten de opdrachten worden uitgevoerd?
Vergeet niet dat u mongoimport
. moet uitvoeren opdrachten vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster).
Voer ze niet uit vanuit de mongo
schelp.