sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man ersätter befintliga dokument när man importerar en fil till MongoDB

När du använder mongoimport för att importera filer till MongoDB har du möjlighet att ersätta befintliga dokument som matchar de du importerar.

Med detta menar jag, om ett importerat dokument har samma _id värde som ett befintligt dokument i samlingen du importerar till kommer det befintliga dokumentet att ersättas med det som importeras.

Du kan också ange ett annat fält (annat än _id). fält) för att vara det matchande fältet vid behov.

Sättet att ersätta befintliga dokument när du använder mongoimport är att använda upsert läge.

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" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }

Och vi har följande JSON-fil som heter pets.json :

{"_id":2,"name":"Fetch","type":"Dog"}
{"_id":3,"name":"Scratch","type":"Cat","weight":10}
{"_id":4,"name":"Hop","type":"Kangaroo","weight":60}

Följande kommando importerar JSON-filen till samlingen:

mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json

Detta använder upsert läge för att ersätta matchande dokument med de importerade.

Kontrollera resultaten

Låt oss ta en titt på kollektionen nu.

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog" }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 10 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }

Vi kan se att dokument 2 har ersatts helt. Hunden Bark har ersatts med hunden Fetch , och ingen vikt registreras för Fetch .

Dokument 3 har också ersatts och dokument 4 är ett helt nytt dokument.

Ä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 den här parametern skickar du fälten som en kommaseparerad lista.

Anta att vi har en annan JSON-fil som heter pets2.json som vi vill importera, och det ser ut så här:

{"name":"Fetch","type":"Dog","weight":20,"gooddog":true}
{"name":"Scratch","type":"Cat","weight":15}
{"name":"Bubbles","type":"Fish"}

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=upsert --upsertFields=name,type --file=data/pets2.json

Låt oss nu kontrollera samlingen igen:

db.pets.find()

Resultat:

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 20, "gooddog" : true }
{ "_id" : 3, "name" : "Scratch", "type" : "Cat", "weight" : 15 }
{ "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
{ "_id" : ObjectId("5ff00800d99141016941217c"), "name" : "Bubbles", "type" : "Fish" }

Vi kan se att Fetch har uppdaterats/ersatts (men _id värdet förblir detsamma). Samma sak med Scratch.

Bubbles å andra sidan hade ingen matchning för upsertfälten och infogades därför.

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 kommandotolksfönster).

Kör dem inte från mongo skal.


  1. Finns det ett inbäddningsbart Java-alternativ till Redis?

  2. En publikation döljer kapslade fält från en annan publikation

  3. Hur lagrar/visar jag stycken med mongodb?

  4. Vad är skillnaden mellan id och _id i mongoose?