Tôi nhận ra rằng đây là một câu hỏi khá cũ và mongodump / mongorestore rõ ràng là cách đúng đắn nếu bạn muốn một kết quả trung thực 100%, bao gồm các chỉ số.
Tuy nhiên, tôi cần một giải pháp nhanh và bẩn có khả năng tương thích ngược và ngược giữa các phiên bản cũ và mới của MongoDB, miễn là không có gì đặc biệt xảy ra. Và vì điều đó tôi muốn câu trả lời cho câu hỏi ban đầu.
Có những giải pháp khác được chấp nhận ở trên, nhưng đường dẫn Unix này tương đối ngắn và ngọt ngào:
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
Điều này tạo ra một .json
tệp có tên thích hợp cho mỗi bộ sưu tập.
Lưu ý rằng tên cơ sở dữ liệu ("mydatabase") xuất hiện hai lần. Tôi giả sử cơ sở dữ liệu là cục bộ và bạn không cần phải thông tin đăng nhập nhưng thật dễ dàng để làm điều đó với cả mongo
và mongoexport
.
Lưu ý rằng tôi đang sử dụng grep -v
để loại bỏ system.indexes
, vì tôi không muốn phiên bản cũ hơn của MongoDB sẽ cố gắng diễn giải một bộ sưu tập hệ thống từ một phiên bản mới hơn. Thay vào đó, tôi cho phép ứng dụng của mình thực hiện các ensureIndex
cuộc gọi thông thường để tạo lại các chỉ mục.