MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách chuyển chế độ xem MongoDB thành Bộ sưu tập

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 mongodumpmongorestore .

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 mongodumpmongorestore .

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

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cơ sở dữ liệu đám mây tự làm trên Amazon Web Services - Sách trắng mới

  2. Có thể truyền trong MongoDB-Query không?

  3. Làm thế nào để thực hiện một Order By dựa trên giá trị trong MongoDB?

  4. Nhà điều hành đường ống tổng hợp MongoDB $ min

  5. xếp hạng bảng xếp hạng trong mongo với những người chơi xung quanh