В по-ранни версии на MongoDB можете да използвате db.collection.copyTo()
метод за копиране на колекция.
Оттогава MongoDB отхвърли този метод. Също така, започвайки от версия 4.2, MongoDB премахна eval
команда. Даден е db.collection.copyTo()
обвива eval
, това означава, че не можете да използвате нито един от тях, ако използвате MongoDB 4.2 или по-нова версия.
За щастие има друг начин да копирате колекция MongoDB.
Проверете за инструменти за база данни на MongoDB
В MongoDB можете да клонирате колекция с помощта на MongoDB Database Tools. По-конкретно, можете да използвате mongodump
и mongorestore
.
Инструментите за база данни на MongoDB са набор от помощни програми от командния ред за работа с MongoDB.
Ако не сте сигурни дали имате инсталирани MongoDB Database Tools, опитайте да изпълните следните команди във вашия терминал или команден ред, за да проверите:
mongodump --version
mongorestore --version
Това специално проверява за mongodump
и mongorestore
версии.
Ако нямате такива, можете да използвате инструкциите за инсталиране на уебсайта на MongoDB, за да инсталирате MongoDB Database Tools на вашата система.
Клонирайте колекция в същата база данни
Трябва да стартирате mongodump
и mongorestore
от командния ред на вашата система (например нов прозорец на терминал или команден ред). Не го стартирайте от mongo
черупка.
Ето пример за код, който клонира колекция към същата база данни:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
В този случай правим резервно копие на pets
колекция в PetHotel
база данни, след което я възстановете като pets2
в същата база данни.
Това използва mongodump
за да създадете архивен файл на колекцията, след това mongorestore
за да възстановите тази колекция под друго име. Направихме това, като изхвърлихме колекцията в стандартния изходен поток и прехвърлихме в mongorestore
.
Ето какво прави всеки параметър:
Параметър | Описание |
---|---|
--archive | Записва изхода в определен архивен файл или, ако архивният файл не е посочен, записва в стандартния изход (stdout ). В нашия случай архивният файл е неуточнен, така че записа в стандартния изход. |
--db | Указва базата данни, която съдържа колекцията, която искаме да клонираме. В този случай базата данни се нарича PetHotel . |
--nsFrom | Указва колекцията в дъмп файла. Това е колекцията, която искаме да клонираме. |
--nsTo | Указва името на колекцията, която трябва да се използва при възстановяване. В нашия случай го наричаме pets2 . |
Копиране на колекция в друга база данни
Можете да използвате същата техника, за да копирате колекцията в друга база данни. В този случай дори няма да е необходимо да променяте името на колекцията, ако не искате.
Ето един пример:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Това е много подобно на предишния пример, с изключение на нашия --nsTo
аргумент определя PetHouse.pets
като колекция дестинация.
Това означава, че клонираната колекция ще се нарича pets
, и ще се намира в PetHouse
база данни (вместо оригиналния PetHotel
база данни).