Fra mongoimport version 100.0.0, kan du slette dokumenter i MongoDB baseret på en importeret fil. For at gøre dette skal du bruge delete tilstand.
Når du bruger delete tilstand, hvis et importeret dokument har samme _id værdi som en eksisterende i den samling, du importerer til, slettes det eksisterende dokument.
Du kan også angive et eller flere andre felter (andre end _id). felt) for at være det matchende felt, hvis det kræves.
Eksempel
Antag, at vi har en samling kaldet pets der indeholder følgende dokumenter:
db.pets.find() Resultat:
{ "_id" :1, "name" :"Wag", "type" :"Hund", "weight" :20 }{ "_id" :2, "name" :"Bark", "type" :"Hund", "vægt" :10 }{ "_id" :3, "name" :"Mjav", "type" :"Kat", "vægt" :7 }{ "_id" :4, "navn" :"Scratch", "type" :"Kat", "vægt" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Flagermus", "vægt" :3 }
Og vi har følgende JSON-fil kaldet pets.json :
{"_id":1,"name":"Wag","type":"Hund"}{"_id":2,"name":"Fluffy","type":"Kat"," weight":10}{"_id":9,"name":"Hop","type":"Kænguru","vægt":60}
Følgende kommando importerer JSON-filen ved hjælp af delete tilstand:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json
Kørsel af denne kommando sletter alle matchende dokumenter i samlingen.
Tjek resultaterne
Lad os tage et kig på kollektionen nu.
db.pets.find()
Resultat:
{ "_id" :3, "name" :"Mjav", "type" :"Kat", "vægt" :7 }{ "_id" :4, "name" :"Scratch", "type" :"Kat", "vægt" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Flagermus", "vægt" :3 }
Vi kan se, at de første 2 dokumenter er blevet slettet. De blev slettet, fordi deres _id værdier matchede _id værdier i de eksisterende dokumenter. Dette er på trods af, at andre detaljer ikke nødvendigvis stemmer overens (såsom med dokument 2).
Vores importerede fil havde også et dokument med en _id af 9, men der var intet matchende dokument, så intet blev slettet for det.
Skift Upsert Field/s
Du kan bruge --upsertFields parameter for at angive et andet felt end _id som man kan matche mod. Når du bruger flere felter med denne parameter, skal du sende dem som en kommasepareret liste.
Antag, at vi har en anden JSON-fil kaldet pets2.json og det ser sådan ud:
{ "name" :"Mjav", "type" :"Kat", "vægt" :7 }{ "name" :"Bobler", "type" :"Fisk", "vægt" :3 }
Dette dokument inkluderer ikke _id felt, så vi bliver nødt til at matche med andre felter, der entydigt identificerer hvert dokument. I dette tilfælde kunne vi bruge name og type felter.
Vi kan derfor bruge følgende mongoimport kommando:
mongoimport --db=PetHotel --collection=pets --mode=delete --upsertFields=name,type --file=data/pets2.json
Lad os nu tjekke samlingen igen:
db.pets.find()
Resultat:
{ "_id" :4, "name" :"Scratch", "type" :"Kat", "vægt" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Flagermus", "vægt" :3 }
Meow katten blev slettet, fordi det kæledyr fandtes i både MongoDB-samlingen og det importerede dokument.
Bobler fisken havde intet matchende dokument, og så intet blev slettet for den.
Se efter mongoimport
mongoimport er en del af MongoDB Database Tools-pakken. MongoDB-databaseværktøjerne er en række kommandolinjeværktøjer til at arbejde med MongoDB.
Hvis du ikke er sikker på, om du har MongoDB Database Tools/mongoimport installeret, prøv at køre følgende kommando i din terminal eller kommandoprompt for at kontrollere:
mongoimport --version
Hvis du har det, bør du se versionsoplysninger osv. Hvis du ikke har det, kan du bruge installationsinstruktionerne på MongoDB-webstedet til at installere det på dit system.
Hvor skal kommandoerne køres?
Glem ikke, du skal køre mongoimport kommandoer fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue).
Kør dem ikke fra mongo skal.