Nếu bạn có một chế độ xem trong cơ sở dữ liệu MongoDB mà bạn muốn trở thành một bộ sưu tập, thì bạn đang ở đúng nơi.
Dưới đây là một ví dụ về việc chuyển đổi một chế độ xem thành một bộ sưu tập trong MongoDB.
Ví dụ
Ví dụ này trình bày cách chuyển đổi một dạng xem thành một bộ sưu tập bằng cách sử dụng Công cụ cơ sở dữ liệu MongoDB mongodump
và mongorestore
.
Nếu bạn chưa cài đặt các công cụ này, hãy xem hướng dẫn cài đặt MongoDB.
Tìm một chế độ xem
Trước tiên, hãy xem các chế độ xem và bộ sưu tập trong cơ sở dữ liệu hiện tại:
show collections
Kết quả:
employees owners pets system.views v_pettypes
Trong trường hợp này, v_pettypes
thực sự là một khung nhìn.
Chúng tôi có thể xác minh rằng đó là một chế độ xem bằng truy vấn sau:
db.getCollectionInfos( { "name": "v_pettypes"} )
Kết quả:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Chúng tôi biết đó là một chế độ xem vì type
trường có giá trị là view
.
Chuyển Chế độ xem thành Bộ sưu tập
Bây giờ chúng tôi có thể tiếp tục và chuyển đổi chế độ xem đó thành một bộ sưu tập. Chúng ta có thể thực hiện việc này với Công cụ cơ sở dữ liệu MongoDB mongodump
và mongorestore
.
Chúng tôi sẽ sử dụng mongodump
để xuất chế độ xem và mongorestore
để khôi phục lại nó. Cụ thể, chúng tôi sẽ viết mongodump
luồng đầu ra vào mongorestore
. Bằng cách đó, chúng tôi có thể thực hiện toàn bộ công việc cùng một lúc.
Đây là mã:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Bạn cần chạy mã đó từ dòng lệnh của hệ thống (ví dụ:cửa sổ Terminal hoặc Command Prompt mới). Đừng chạy nó từ mongo
vỏ bọc.
Chạy mã đó đã chuyển đổi v_pettypes
xem bộ sưu tập có tên pettypes
trong cùng một cơ sở dữ liệu.
Nói một cách chính xác, chúng tôi không thực sự chuyển đổi xem một bộ sưu tập. Chúng tôi chỉ sử dụng --viewsAsCollections
để kết xuất dạng xem dưới dạng một bộ sưu tập, sau đó chúng tôi khôi phục bộ sưu tập đó trở lại cơ sở dữ liệu. Do đó quan điểm ban đầu vẫn tồn tại.
Khi bạn xuất một dạng xem dưới dạng một bộ sưu tập, mongodump
tạo tệp BSON chứa các tài liệu trong dạng xem. Nếu bạn sử dụng mongorestore
để khôi phục tệp BSON đã tạo, chế độ xem sẽ được khôi phục dưới dạng một bộ sưu tập.
Không sử dụng --viewsAsCollections
đối số, mongodump
xuất siêu dữ liệu của từng chế độ xem. Nếu bạn bao gồm tệp siêu dữ liệu của một chế độ xem trong mongorestore
hoạt động, chế độ xem được tạo lại.
Sử dụng --viewsAsCollections
cũng bỏ qua tất cả các bộ sưu tập tiêu chuẩn.
Kiểm tra kết quả
Hãy cùng nhìn lại các quan điểm và bộ sưu tập của chúng tôi.
show collections
Kết quả:
employees owners pets pettypes system.views v_pettypes
Vì vậy, chúng ta có thể thấy rằng một bộ sưu tập mới có tên là pettypes
tồn tại và chế độ xem ban đầu vẫn tồn tại.
Chúng tôi có thể xác minh rằng pettypes
là một tập hợp (chứ không phải một chế độ xem) như sau:
db.getCollectionInfos( { "name": "pettypes"} )
Kết quả:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Chúng ta có thể thấy rằng type
trường chứa giá trị của collection
, có nghĩa là đó là một bộ sưu tập.
Bỏ chế độ xem ban đầu
Ở giai đoạn này, bây giờ chúng ta có sự lựa chọn là xóa chế độ xem ban đầu hoặc để nó ở đó.
Chúng tôi có thể thả nó như thế này:
db.v_pettypes.drop()
Bây giờ, nếu chúng tôi kiểm tra các bộ sưu tập, chúng tôi có thể thấy rằng chế độ xem ban đầu đã biến mất và bộ sưu tập mới vẫn còn.
show collections
Kết quả:
employees owners pets pettypes system.views