Når du bruger mongoimport
for at importere filer til MongoDB, har du mulighed for at flette eksisterende dokumenter med dem, du importerer.
I dette tilfælde, hvis et importeret dokument har samme _id
værdi som en eksisterende i den samling, du importerer til, vil det eksisterende dokument blive flettet 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.
Når du flette dokumenter, vil det resulterende dokument kombinere eksisterende data med alle nye data, der er i den importerede fil. Alle data, der er de samme, forbliver de samme. Eventuelle modstridende data vil resultere i, at den importerede fils data overskriver de eksisterende data. Hvis et importeret dokument ikke indeholder et felt, der er i det tilsvarende dokument i MongoDB-samlingen, forbliver dette felt uændret i samlingen (dvs. det vil ikke blive fjernet eller ændret).
Måden at flette dokumenter med mongoimport
er at bruge merge
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" } { "_id" : 2, "name" : "Bark", "type" : "Dog" } { "_id" : 3, "name" : "Meow", "type" : "Cat" }
Og vi har følgende JSON-fil kaldet 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ølgende kommando importerer JSON-filen til samlingen:
mongoimport --db=PetHotel --collection=pets --mode=merge --file=data/pets.json
Dette bruger merge
tilstand for at flette 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" } { "_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, at dokument 1 er uændret, dokument 2 har fået ændret sit navnefelt til Fetch
, og den har også haft en weight
felt tilføjet.. Dokument 3 har også fået tilføjet et vægtfelt, og dokument 4 er indsat.
Skift Upsert Field/s
Du kan bruge --upsertFields
parameter for at angive et andet felt end _id
at matche imod. 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":"Wag","type":"Dog","weight":20.0,"gooddog":true} {"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=merge --upsertFields=name,type --file=data/pets2.json
Lad os nu tjekke 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, at Wag er blevet opdateret (men _id
værdien forbliver den samme).
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.