V dřívějších verzích MongoDB jste mohli použít db.collection.copyTo()
způsob kopírování kolekce.
MongoDB od té doby tuto metodu zavrhl. Počínaje verzí 4.2 také MongoDB odstranil eval
příkaz. Je dáno db.collection.copyTo()
zalomí eval
, to znamená, že nemůžete použít ani jeden z nich, pokud používáte MongoDB 4.2 nebo novější.
Naštěstí existuje jiný způsob, jak zkopírovat sbírku MongoDB.
Vyhledejte databázové nástroje MongoDB
V MongoDB můžete klonovat kolekci pomocí databázových nástrojů MongoDB. Konkrétně můžete použít mongodump
a mongorestore
.
Databázové nástroje MongoDB jsou sada nástrojů příkazového řádku pro práci s MongoDB.
Pokud si nejste jisti, zda máte nainstalované databázové nástroje MongoDB, zkuste spustit následující příkazy v terminálu nebo příkazovém řádku a zkontrolujte:
mongodump --version
mongorestore --version
To konkrétně kontroluje mongodump
a mongorestore
verze.
Pokud je nemáte, můžete k instalaci databázových nástrojů MongoDB do vašeho systému použít pokyny k instalaci na webu MongoDB.
Klonujte kolekci do stejné databáze
Musíte spustit mongodump
a mongorestore
z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku). Nespouštějte jej z mongo
skořápka.
Zde je příklad kódu, který klonuje kolekci do stejné databáze:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
V tomto případě zálohujeme pets
kolekce v PetHotel
databázi a poté ji obnovte jako pets2
ve stejné databázi.
Toto používá mongodump
vytvořte záložní soubor kolekce a poté mongorestore
obnovit tuto sbírku pod jiným názvem. Udělali jsme to tak, že jsme uložili kolekci do standardního výstupního proudu a nasměrovali do mongorestore
.
Každý parametr dělá toto:
Parametr | Popis |
---|---|
--archive | Zapíše výstup do zadaného archivního souboru nebo, pokud archivní soubor není specifikován, zapíše do standardního výstupu (stdout ). V našem případě je archivní soubor nespecifikován, takže se zapisoval na standardní výstup. |
--db | Určuje databázi obsahující kolekci, kterou chceme klonovat. V tomto případě se databáze nazývá PetHotel . |
--nsFrom | Určuje kolekci v souboru výpisu. Toto je sbírka, kterou chceme naklonovat. |
--nsTo | Uvádí název kolekce, který by měl být použit při obnově. V našem případě to nazýváme pets2 . |
Kopírování kolekce do jiné databáze
Stejnou techniku můžete použít ke zkopírování kolekce do jiné databáze. V tomto případě byste ani nemuseli měnit název sbírky, pokud nechcete.
Zde je příklad:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Toto je velmi podobné předchozímu příkladu, s výjimkou našeho --nsTo
argument určuje PetHouse.pets
jako cílová kolekce.
To znamená, že klonovaná kolekce se bude nazývat pets
a bude umístěn v PetHouse
databáze (místo původní PetHotel
databáze).