sql >> Databasteknik >  >> NoSQL >> MongoDB

Kopiera/klona en samling i MongoDB

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).


  1. mongodb/mongoose findMany - hitta alla dokument med ID:n listade i array

  2. MongoDB:kontrollera anslutningen till DB

  3. MongoDB-fråga med ett "eller"-villkor

  4. mongoDB :Skapa ett objekt-ID för varje nytt barn som läggs till i matrisfältet