In eerdere versies van MongoDB kon je de db.collection.copyTo()
gebruiken methode om een verzameling te kopiëren.
MongoDB heeft die methode sindsdien afgeschaft. Vanaf versie 4.2 heeft MongoDB ook de eval
. verwijderd opdracht. Gegeven db.collection.copyTo()
wraps eval
, dit betekent dat u geen van beide kunt gebruiken als u MongoDB 4.2 of hoger gebruikt.
Gelukkig is er een andere manier om een MongoDB-verzameling te kopiëren.
Controleer op MongoDB Database Tools
In MongoDB kunt u een verzameling klonen met behulp van de MongoDB Database Tools. In het bijzonder kunt u mongodump
. gebruiken en mongorestore
.
De MongoDB Database Tools zijn een reeks opdrachtregelhulpprogramma's voor het werken met MongoDB.
Als je niet zeker weet of je de MongoDB Database Tools hebt geïnstalleerd, probeer dan de volgende commando's in je Terminal of Command Prompt om te controleren:
mongodump --version
mongorestore --version
Dat controleert specifiek op de mongodump
en mongorestore
versies.
Als je ze niet hebt, kun je de installatie-instructies op de MongoDB-website gebruiken om MongoDB Database Tools op je systeem te installeren.
Kloon een verzameling naar dezelfde database
U moet mongodump
. uitvoeren en mongorestore
vanaf de opdrachtregel van uw systeem (bijvoorbeeld een nieuw Terminal- of opdrachtpromptvenster). Voer het niet uit vanaf de mongo
schelp.
Hier is een voorbeeld van code die een verzameling naar dezelfde database kloont:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
In dit geval maken we een back-up van de pets
ophalen in het PetHotel
database en herstel deze vervolgens als pets2
in dezelfde database.
Dit gebruikt mongodump
om een back-upbestand van de verzameling te maken en vervolgens mongorestore
om die collectie onder een andere naam te herstellen. We hebben dit gedaan door de verzameling naar de standaard uitvoerstroom te dumpen en door te sluizen naar mongorestore
.
Dit is wat elke parameter doet:
Parameter | Beschrijving |
---|---|
--archive | Schrijft de uitvoer naar een gespecificeerd archiefbestand of, als het archiefbestand niet gespecificeerd is, schrijft naar de standaarduitvoer (stdout ). In ons geval is het archiefbestand niet gespecificeerd, dus schreef het naar de standaarduitvoer. |
--db | Specificeert de database die de collectie bevat die we willen klonen. In dit geval heet de database PetHotel . |
--nsFrom | Specificeert de verzameling in het dumpbestand. Dit is de collectie die we willen klonen. |
--nsTo | Specificeert de collectienaam die moet worden gebruikt bij het herstellen. In ons geval noemen we het pets2 . |
Kopieer een verzameling naar een andere database
U kunt dezelfde techniek gebruiken om de verzameling naar een andere database te kopiëren. In dit geval hoeft u de naam van de collectie niet eens te wijzigen als u dat niet wilt.
Hier is een voorbeeld:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Dit lijkt erg op het vorige voorbeeld, behalve dat onze --nsTo
argument specificeert PetHouse.pets
als de bestemmingsverzameling.
Dit betekent dat de gekloonde verzameling pets
wordt genoemd , en het bevindt zich in het PetHouse
database (in plaats van het originele PetHotel
database).