Trong các phiên bản trước của MongoDB, bạn có thể sử dụng db.collection.copyTo()
phương pháp để sao chép một bộ sưu tập.
MongoDB đã không dùng phương pháp đó nữa. Ngoài ra, bắt đầu từ phiên bản 4.2, MongoDB đã xóa eval
yêu cầu. Đưa ra db.collection.copyTo()
kết thúc eval
, điều này có nghĩa là bạn không thể sử dụng một trong số chúng nếu bạn đang sử dụng MongoDB 4.2 trở lên.
May mắn thay, có một cách khác để sao chép bộ sưu tập MongoDB.
Kiểm tra Công cụ Cơ sở dữ liệu MongoDB
Trong MongoDB, bạn có thể sao chép một bộ sưu tập bằng cách sử dụng Công cụ cơ sở dữ liệu MongoDB. Cụ thể, bạn có thể sử dụng mongodump
và mongorestore
.
Công cụ cơ sở dữ liệu MongoDB là một bộ tiện ích dòng lệnh để làm việc với MongoDB.
Nếu bạn không chắc mình đã cài đặt Công cụ cơ sở dữ liệu MongoDB hay chưa, hãy thử chạy các lệnh sau trong Terminal hoặc Command Prompt để kiểm tra:
mongodump --version
mongorestore --version
Điều đó đặc biệt kiểm tra mongodump
và mongorestore
các phiên bản.
Nếu chưa có, bạn có thể sử dụng hướng dẫn cài đặt trên trang web MongoDB để cài đặt Công cụ cơ sở dữ liệu MongoDB vào hệ thống của mình.
Sao chép một Bộ sưu tập vào cùng một cơ sở dữ liệu
Bạn cần chạy mongodump
và mongorestore
từ dòng lệnh của hệ thống của bạn (ví dụ:cửa sổ Terminal hoặc Command Prompt mới). Đừng chạy nó từ mongo
vỏ bọc.
Dưới đây là một ví dụ về mã sao chép một bộ sưu tập vào cùng một cơ sở dữ liệu:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHotel.pets2'
Trong trường hợp này, chúng tôi sao lưu pets
bộ sưu tập trong PetHotel
cơ sở dữ liệu, sau đó khôi phục nó dưới dạng pets2
trong cùng một cơ sở dữ liệu.
Điều này sử dụng mongodump
để tạo tệp sao lưu của bộ sưu tập, sau đó mongorestore
để khôi phục bộ sưu tập đó dưới một tên khác. Chúng tôi đã thực hiện việc này bằng cách kết xuất bộ sưu tập xuống luồng đầu ra tiêu chuẩn và chuyển vào mongorestore
.
Đây là chức năng của mỗi thông số:
Tham số | Mô tả |
---|---|
--archive | Ghi kết quả đầu ra vào một tệp lưu trữ được chỉ định hoặc, nếu tệp lưu trữ không được chỉ định, ghi vào đầu ra chuẩn (stdout ). Trong trường hợp của chúng tôi, tệp lưu trữ là không xác định, vì vậy nó được ghi vào đầu ra chuẩn. |
--db | Chỉ định cơ sở dữ liệu có chứa bộ sưu tập mà chúng tôi muốn sao chép. Trong trường hợp này, cơ sở dữ liệu được gọi là PetHotel . |
--nsFrom | Chỉ định bộ sưu tập trong tệp kết xuất. Đây là bộ sưu tập chúng tôi muốn sao chép. |
--nsTo | Chỉ định tên bộ sưu tập sẽ được sử dụng khi khôi phục. Trong trường hợp của chúng tôi, chúng tôi gọi nó là pets2 . |
Sao chép Bộ sưu tập sang Cơ sở dữ liệu khác
Bạn có thể sử dụng kỹ thuật tương tự để sao chép bộ sưu tập sang cơ sở dữ liệu khác. Trong trường hợp này, bạn thậm chí không cần phải thay đổi tên của bộ sưu tập nếu bạn không muốn.
Đây là một ví dụ:
mongodump --archive --db=PetHotel --collection=pets | mongorestore --archive --nsFrom='PetHotel.pets' --nsTo='PetHouse.pets'
Điều này rất giống với ví dụ trước, ngoại trừ --nsTo
của chúng tôi đối số chỉ định PetHouse.pets
như bộ sưu tập đích.
Điều này có nghĩa là bộ sưu tập nhân bản sẽ được gọi là pets
và nó sẽ nằm trong PetHouse
cơ sở dữ liệu (thay vì PetHotel
ban đầu cơ sở dữ liệu).