Från och med mongoimport version 100.0.0 kan du ta bort dokument i MongoDB baserat på en importerad fil. För att göra detta, använd delete läge.
När du använder delete läge, om ett importerat dokument har samma _id värde som ett befintligt i samlingen som du importerar till, kommer det befintliga dokumentet att raderas.
Du kan också ange ett eller flera andra fält (andra än _id). fält) för att vara det matchande fältet vid behov.
Exempel
Anta att vi har en samling som heter pets som innehåller följande dokument:
db.pets.find() Resultat:
{ "_id" :1, "name" :"Wag", "type" :"Hund", "weight" :20 }{ "_id" :2, "name" :"Bark", "typ" :"Hund", "vikt" :10 }{ "_id" :3, "name" :"Mjau", "typ" :"Katt", "vikt" :7 }{ "_id" :4, "namn" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 }
Och vi har följande JSON-fil som heter pets.json :
{"_id":1,"name":"Wag","type":"Hund"}{"_id":2,"name":"Fluffig","type":"Katt"," vikt":10}{"_id":9,"name":"Hopp","type":"Känguru","vikt":60}
Följande kommando importerar JSON-filen med delete läge:
mongoimport --db=PetHotel --collection=pets --mode=delete --file=data/pets.json
Om du kör det här kommandot raderas alla matchande dokument i samlingen.
Kontrollera resultaten
Låt oss ta en titt på kollektionen nu.
db.pets.find()
Resultat:
{ "_id" :3, "name" :"Mjau", "type" :"Katt", "vikt" :7 }{ "_id" :4, "name" :"Scratch", "typ" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "type" :"Bat", "weight" :3 }
Vi kan se att de första 2 dokumenten har raderats. De raderades eftersom deras _id värden matchade _id värden i de befintliga dokumenten. Detta trots att andra detaljer inte nödvändigtvis matchar (som med dokument 2).
Dessutom hade vår importerade fil ett dokument med ett _id av 9 men det fanns inget matchande dokument, så ingenting raderades för det.
Ändra Upsert Field/s
Du kan använda --upsertFields parameter för att ange ett annat fält än _id att matcha mot. När du använder flera fält med denna parameter, skicka dem som en kommaseparerad lista.
Anta att vi har en annan JSON-fil som heter pets2.json och det ser ut så här:
{ "name" :"Mjau", "type" :"Katt", "vikt" :7 }{ "name" :"Bubblor", "type" :"Fisk", "vikt" :3 }
Det här dokumentet innehåller inte _id fält, så vi skulle behöva matcha mot andra fält som unikt identifierar varje dokument. I det här fallet kan vi använda name och type fält.
Vi kan därför använda följande mongoimport kommando:
mongoimport --db=PetHotel --collection=pets --mode=delete --upsertFields=name,type --file=data/pets2.json
Låt oss nu kontrollera samlingen igen:
db.pets.find()
Resultat:
{ "_id" :4, "name" :"Scratch", "type" :"Cat", "weight" :8 }{ "_id" :5, "name" :"Bruce", "typ" :"Bat", "weight" :3 }
Meow katten togs bort eftersom det husdjuret fanns i både MongoDB-samlingen och det importerade dokumentet.
Bubblar fisken hade inget matchande dokument och så ingenting raderades för den.
Kontrollera efter mongoimport
mongoimport är en del av MongoDB Database Tools-paketet. MongoDB Database Tools är en uppsättning kommandoradsverktyg för att arbeta med MongoDB.
Om du inte är säker på om du har MongoDB Database Tools/mongoimport installerat, prova att köra följande kommando i din terminal eller kommandotolk för att kontrollera:
mongoimport --version
Om du har det bör du se versionsinformation etc. Om du inte har det kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera det på ditt system.
Var kör man kommandona?
Glöm inte att du måste köra mongoimport kommandon från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolkfönster).
Kör dem inte från mongo skal.