I tidigare versioner av MongoDB kunde du använda db.collection.copyTo()
metod för att kopiera en samling.
MongoDB har sedan dess avvecklat den metoden. Från och med version 4.2 har MongoDB också tagit bort eval
kommando. Givet db.collection.copyTo()
omsluter eval
, detta betyder att du inte kan använda någon av dem om du använder MongoDB 4.2 eller senare.
Lyckligtvis finns det ett annat sätt att kopiera en MongoDB-samling.
Sök efter MongoDB Database Tools
I MongoDB kan du klona en samling med hjälp av MongoDB Database Tools. Specifikt kan du använda mongodump
och mongorestore
.
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 installerade, prova att köra följande kommandon i din terminal eller kommandotolk för att kontrollera:
mongodump --version
mongorestore --version
Det söker specifikt efter mongodump
och mongorestore
versioner.
Om du inte har dem kan du använda installationsinstruktionerna på MongoDB-webbplatsen för att installera MongoDB Database Tools på ditt system.
Klona en samling till samma databas
Du måste köra mongodump
och mongorestore
från ditt systems kommandorad (t.ex. ett nytt terminal- eller kommandotolksfönster). Kör det inte från mongo
skal.
Här är ett exempel på kod som klonar en samling till samma databas:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
I det här fallet säkerhetskopierar vi pets
samling i PetHotel
databas, återställ den sedan som pets2
i samma databas.
Detta använder mongodump
för att skapa en säkerhetskopia av samlingen, sedan mongorestore
för att återställa den samlingen under ett annat namn. Vi gjorde detta genom att dumpa samlingen till standardutgångsströmmen och skicka in i mongorestore
.
Så här gör varje parameter:
Parameter | Beskrivning |
---|---|
--archive | Skriver utdata till en specificerad arkivfil eller, om arkivfilen är ospecificerad, skriver till standardutdata (stdout ). I vårt fall är arkivfilen ospecificerad, så den skrev till standardutgången. |
--db | Anger databasen som innehåller samlingen vi vill klona. I det här fallet kallas databasen PetHotel . |
--nsFrom | Anger samlingen i dumpfilen. Det här är samlingen vi vill klona. |
--nsTo | Anger samlingsnamnet som ska användas vid återställning. I vårt fall kallar vi det pets2 . |
Kopiera en samling till en annan databas
Du kan använda samma teknik för att kopiera samlingen till en annan databas. I det här fallet skulle du inte ens behöva ändra namnet på samlingen om du inte vill.
Här är ett exempel:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Detta är väldigt likt det tidigare exemplet, förutom att vår --nsTo
argument anger PetHouse.pets
som destinationssamling.
Det betyder att den klonade samlingen kommer att kallas pets
, och den kommer att finnas i PetHouse
databas (istället för den ursprungliga PetHotel
databas).