I tidligere versioner af MongoDB kunne du bruge db.collection.copyTo()
metode til at kopiere en samling.
MongoDB har siden forældet denne metode. Fra og med version 4.2 har MongoDB også fjernet eval
kommando. Givet db.collection.copyTo()
omslutter eval
, betyder det, at du ikke kan bruge nogen af dem, hvis du bruger MongoDB 4.2 eller nyere.
Heldigvis er der en anden måde at kopiere en MongoDB-samling på.
Søg efter MongoDB-databaseværktøjer
I MongoDB kan du klone en samling ved hjælp af MongoDB Database Tools. Specifikt kan du bruge mongodump
og mongorestore
.
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 installeret MongoDB-databaseværktøjerne, kan du prøve at køre følgende kommandoer i din terminal eller kommandoprompt for at kontrollere:
mongodump --version
mongorestore --version
Det tjekker specifikt efter mongodump
og mongorestore
versioner.
Hvis du ikke har dem, kan du bruge installationsinstruktionerne på MongoDB-webstedet til at installere MongoDB-databaseværktøjer på dit system.
Klon en samling til den samme database
Du skal køre mongodump
og mongorestore
fra dit systems kommandolinje (f.eks. et nyt terminal- eller kommandopromptvindue). Kør det ikke fra mongo
skal.
Her er et eksempel på kode, der kloner en samling til den samme database:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
I dette tilfælde sikkerhedskopierer vi pets
samling i PetHotel
database, og gendan den derefter som pets2
i samme database.
Dette bruger mongodump
for at oprette en sikkerhedskopi af samlingen, derefter mongorestore
at gendanne denne samling under et andet navn. Vi gjorde dette ved at dumpe samlingen til standardoutputstrømmen og røre ind i mongorestore
.
Her er, hvad hver parameter gør:
Parameter | Beskrivelse |
---|---|
--archive | Skriver output til en specificeret arkivfil eller, hvis arkivfilen er uspecificeret, skriver til standardoutput (stdout ). I vores tilfælde er arkivfilen uspecificeret, så den skrev til standardoutputtet. |
--db | Specificerer den database, der indeholder den samling, vi ønsker at klone. I dette tilfælde kaldes databasen PetHotel . |
--nsFrom | Specificerer samlingen i dumpfilen. Dette er den samling, vi ønsker at klone. |
--nsTo | Specificerer samlingsnavnet, der skal bruges, når det gendannes. I vores tilfælde kalder vi det pets2 . |
Kopiér en samling til en anden database
Du kan bruge samme teknik til at kopiere samlingen til en anden database. I dette tilfælde behøver du ikke engang at ændre navnet på samlingen, hvis du ikke vil.
Her er et eksempel:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Dette er meget lig det forrige eksempel, bortset fra at vores --nsTo
argument specificerer PetHouse.pets
som destinationssamling.
Det betyder, at den klonede samling vil blive kaldt pets
, og det vil være placeret i PetHouse
database (i stedet for den originale PetHotel
database).