sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man tar bort MongoDB-dokument genom att importera en fil

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.


  1. Prestanda för Redis vs Disk i cacheapplikation

  2. Hur streamar man MongoDB-frågeresultat med nodejs?

  3. Azure VM ansluter inte till Azure Redis Cache men lokal ansluter till Azure Redis Cache

  4. Cachar i Django med Redis