We wcześniejszych wersjach MongoDB można było użyć db.collection.copyTo()
metoda kopiowania kolekcji.
MongoDB od tego czasu wycofał tę metodę. Ponadto, począwszy od wersji 4.2, MongoDB usunął eval
Komenda. Biorąc pod uwagę db.collection.copyTo()
owija eval
, oznacza to, że nie możesz użyć żadnego z nich, jeśli używasz MongoDB 4.2 lub nowszego.
Na szczęście istnieje inny sposób na skopiowanie kolekcji MongoDB.
Sprawdź narzędzia bazy danych MongoDB
W MongoDB możesz sklonować kolekcję za pomocą narzędzi bazy danych MongoDB. W szczególności możesz użyć mongodump
i mongorestore
.
Narzędzia baz danych MongoDB to zestaw narzędzi wiersza poleceń do pracy z MongoDB.
Jeśli nie masz pewności, czy masz zainstalowane narzędzia baz danych MongoDB, spróbuj uruchomić następujące polecenia w terminalu lub wierszu polecenia, aby sprawdzić:
mongodump --version
mongorestore --version
Sprawdza to konkretnie mongodump
i mongorestore
wersje.
Jeśli ich nie masz, możesz skorzystać z instrukcji instalacji na stronie MongoDB, aby zainstalować narzędzia bazy danych MongoDB w swoim systemie.
Klonuj kolekcję do tej samej bazy danych
Musisz uruchomić mongodump
i mongorestore
z wiersza poleceń systemu (np. nowe okno terminala lub wiersza polecenia). Nie uruchamiaj go z mongo
powłoka.
Oto przykład kodu, który klonuje kolekcję do tej samej bazy danych:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
W tym przypadku tworzymy kopię zapasową pets
odbiór w PetHotel
bazę danych, a następnie przywróć ją jako pets2
w tej samej bazie danych.
To używa mongodump
aby utworzyć kopię zapasową kolekcji, a następnie mongorestore
przywrócić tę kolekcję pod inną nazwą. Zrobiliśmy to, zrzucając kolekcję do standardowego strumienia wyjściowego i przesyłając do mongorestore
.
Oto, co robi każdy parametr:
Parametr | Opis |
---|---|
--archive | Zapisuje dane wyjściowe do określonego pliku archiwum lub, jeśli plik archiwum nie jest określony, zapisuje na standardowym wyjściu (stdout ). W naszym przypadku plik archiwum jest nieokreślony, więc zapisał na standardowe wyjście. |
--db | Określa bazę danych zawierającą kolekcję, którą chcemy sklonować. W tym przypadku baza danych nazywa się PetHotel . |
--nsFrom | Określa kolekcję w pliku zrzutu. To jest kolekcja, którą chcemy sklonować. |
--nsTo | Określa nazwę kolekcji, która powinna być używana podczas przywracania. W naszym przypadku nazywamy to pets2 . |
Kopiuj kolekcję do innej bazy danych
Tej samej techniki można użyć do skopiowania kolekcji do innej bazy danych. W takim przypadku nie musisz nawet zmieniać nazwy kolekcji, jeśli nie chcesz.
Oto przykład:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Jest to bardzo podobne do poprzedniego przykładu, z wyjątkiem tego, że nasz --nsTo
argument określa PetHouse.pets
jako kolekcja docelowa.
Oznacza to, że sklonowana kolekcja będzie nazywać się pets
i będzie znajdować się w PetHouse
baza danych (zamiast oryginalnego PetHotel
bazy danych).