Når du bruger mongoimport
for at importere filer til MongoDB, har du mulighed for at erstatte eksisterende dokumenter, der matcher dem, du importerer.
Med dette mener jeg, hvis et importeret dokument har samme _id
værdi som en eksisterende i den samling, du importerer til, vil det eksisterende dokument blive erstattet med det, der importeres.
Du kan også angive et andet felt (andre end _id
). felt) for at være det matchende felt, hvis det kræves.
Måden at erstatte eksisterende dokumenter, når du bruger mongoimport
er at bruge upsert
tilstand.
Eksempel
Antag, at vi har en samling kaldet pets
der indeholder følgende dokumenter:
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 }
Og vi har følgende JSON-fil kaldet 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ølgende kommando importerer JSON-filen til samlingen:
mongoimport --db=PetHotel --collection=pets --mode=upsert --file=data/pets.json
Dette bruger upsert
tilstand for at erstatte matchende dokumenter med de importerede.
Tjek resultaterne
Lad os tage et kig 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, at dokument 2 er blevet fuldstændig erstattet. Hunden Bark
er blevet erstattet med hunden Fetch
, og der registreres ingen vægt for Fetch
.
Dokument 3 er også blevet erstattet, og dokument 4 er et helt nyt dokument.
Skift Upsert Field/s
Du kan bruge --upsertFields
parameter for at angive et andet felt end _id
som man kan matche mod. Når du bruger denne parameter, skal du sende felterne som en kommasepareret liste.
Antag, at vi har en anden JSON-fil kaldet pets2.json
som vi vil importere, og det ser sådan ud:
{"name":"Fetch","type":"Dog","weight":20,"gooddog":true} {"name":"Scratch","type":"Cat","weight":15} {"name":"Bubbles","type":"Fish"}
Dette dokument inkluderer ikke _id
felt, så vi bliver nødt til at matche med andre felter, der entydigt identificerer hvert dokument. I dette tilfælde kunne vi bruge name
og type
felter.
Vi kan derfor bruge følgende mongoimport
kommando:
mongoimport --db=PetHotel --collection=pets --mode=upsert --upsertFields=name,type --file=data/pets2.json
Lad os nu tjekke 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, at Fetch er blevet opdateret/erstattet (men _id
værdien forbliver den samme). Det samme med Scratch.
Bubbles på den anden side havde ingen match til upsert-felterne og blev derfor indsat.
Se efter mongoimport
mongoimport
er en del af MongoDB Database Tools-pakken. MongoDB-databaseværktøjerne er en række kommandolinjeværktøjer til at arbejde med MongoDB.
Hvis du ikke er sikker på, om du har MongoDB Database Tools/mongoimport
installeret, prøv at køre følgende kommando i din terminal eller kommandoprompt for at kontrollere:
mongoimport --version
Hvis du har det, bør du se versionsoplysninger osv. Hvis du ikke har det, kan du bruge installationsinstruktionerne på MongoDB-webstedet til at installere det på dit system.
Hvor skal kommandoerne køres?
Glem ikke, du skal køre mongoimport
kommandoer fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue).
Kør dem ikke fra mongo
skal.