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.