När du använder mongoimport
för att importera filer till MongoDB har du möjlighet att slå samman befintliga dokument med de som du importerar.
I det här fallet, om ett importerat dokument har samma _id
värde som ett befintligt i samlingen som du importerar till, kommer det befintliga dokumentet att slås samman 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.
När du slår samman dokument kommer det resulterande dokumentet att kombinera befintliga data med alla nya data som finns i den importerade filen. All data som är densamma förblir densamma. Alla motstridiga data kommer att resultera i att den importerade filens data skriver över befintliga data. Om ett importerat dokument inte innehåller ett fält som finns i motsvarande dokument i MongoDB-samlingen, kommer det fältet att förbli oförändrat i samlingen (dvs. det kommer inte att tas bort eller ändras).
Sättet att slå samman dokument med mongoimport
är att använda merge
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" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Och vi har följande JSON-fil som heter pets.json
:
{"_id":2.0,"name":"Fetch","type":"Dog","weight":40.0} {"_id":3.0,"weight":10.0} {"_id":4.0,"name":"Hop","type":"Kangaroo","weight":60.0}
Följande kommando importerar JSON-filen till samlingen:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
Detta använder merge
läge för att slå samman 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" } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 }
Vi kan se att dokument 1 är oförändrat, dokument 2 har fått sitt namnfält ändrat till Fetch
, och den har också haft en weight
fält tillagt.. Dokument 3 har också fått ett viktfält tillagt, och dokument 4 har infogats.
Ä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":"Wag","type":"Dog","weight":20.0,"gooddog":true} {"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=merge --upsertFields=name,type --file=data/pets2.json
Låt oss nu kontrollera samlingen igen:
db.pets.find()
Resultat:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "gooddog" : true, "weight" : 20 } { "_id" : 2, "name" : "Fetch", "type" : "Dog", "weight" : 40 } { "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 10 } { "_id" : 4, "name" : "Hop", "type" : "Kangaroo", "weight" : 60 } { "_id" : ObjectId("5ff0548dd991410169412300"), "name" : "Bubbles", "type" : "Fish" }
Vi kan se att Wag har uppdaterats (men _id
värdet förblir detsamma).
Bubbles å andra sidan hade ingen match 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 kommandotolkfönster).
Kör dem inte från mongo
skal.