sql >> Database >  >> NoSQL >> MongoDB

MongoDB-documenten verwijderen door een bestand te importeren

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.


  1. Hoe de structuur van MongoDB's kaartverminderende resultaten veranderen?

  2. C++ Redis-module maken - het RedisModule_OnLoad()-symbool wordt niet geëxporteerd

  3. Mongodb Explain voor aggregatieraamwerk

  4. nginx lua redis cookie niet ingesteld