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ändaname
ochtype
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.