MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да конвертирате изглед на MongoDB в колекция

Ако имате изглед в база данни на MongoDB, който бихте предпочели да бъде колекция, вие сте на правилното място.

По-долу е даден пример за преобразуване на изглед в колекция в MongoDB.

Пример

Този пример демонстрира как да конвертирате изглед в колекция с помощта на MongoDB Database Tools mongodump и mongorestore .

Ако нямате инсталирани тези инструменти, вижте ръководството за инсталиране на MongoDB.

Намерете изглед

Първо, нека да разгледаме изгледите и колекциите в текущата база данни:

show collections

Резултат:

employees
owners
pets
system.views
v_pettypes

В този случай v_pettypes всъщност е изглед.

Можем да потвърдим, че това е изглед със следната заявка:

db.getCollectionInfos( { "name": "v_pettypes"} )

Резултат:

[
	{
		"name" : "v_pettypes",
		"type" : "view",
		"options" : {
			"viewOn" : "pets",
			"pipeline" : [
				{
					"$group" : {
						"_id" : "$type"
					}
				}
			]
		},
		"info" : {
			"readOnly" : true
		}
	}
]

Знаем, че това е изглед, защото type полето има стойност view .

Преобразуване на изгледа в колекция

Сега можем да продължим и да преобразуваме този изглед в колекция. Можем да направим това с MongoDB Database Tools mongodump и mongorestore .

Ще използваме mongodump за експортиране на изгледа и mongorestore за да го възстановите. По-конкретно, ние ще изпратим mongodump изходен поток в mongorestore . По този начин можем да направим всичко наведнъж.

Ето кода:

mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive  --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'

Трябва да стартирате този код от командния ред на вашата система (например нов прозорец на терминал или команден ред). Не го стартирайте от mongo черупка.

Изпълнението на този код преобразува v_pettypes преглед на колекция, наречена pettypes в същата база данни.

Строго погледнато, ние всъщност не преобразувахме изглед към колекция. Ние просто използвахме --viewsAsCollections аргумент за изхвърляне на изгледа като колекция, след което възстановихме тази колекция обратно в базата данни. Следователно оригиналният изглед все още съществува.

Когато експортирате изглед като колекция, mongodump създава BSON файл, съдържащ документите в изгледа. Ако използвате mongorestore за да възстановите произведения BSON файл, изгледът ще бъде възстановен като колекция.

Без да използвате --viewsAsCollections аргумент, mongodump експортира метаданните на всеки изглед. Ако включите файла с метаданни на изглед в mongorestore операция, изгледът се пресъздава.

Използване на --viewsAsCollections също така пропуска всички стандартни колекции.

Проверете резултатите

Нека да разгледаме отново нашите изгледи и колекции.

show collections

Резултат:

employees
owners
pets
pettypes
system.views
v_pettypes

Така че можем да видим, че нова колекция, наречена pettypes съществува и оригиналният изглед все още съществува.

Можем да потвърдим, че pettypes е колекция (а не изглед), както следва:

db.getCollectionInfos( { "name": "pettypes"} )

Резултат:

[
	{
		"name" : "pettypes",
		"type" : "collection",
		"options" : {
			
		},
		"info" : {
			"readOnly" : false,
			"uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62")
		},
		"idIndex" : {
			"v" : 2,
			"key" : {
				"_id" : 1
			},
			"name" : "_id_"
		}
	}
]

Можем да видим, че type полето съдържа стойност на collection , което означава, че е колекция.

Изхвърлете оригиналния изглед

На този етап вече имаме избор дали да изтрием оригиналния изглед или да го оставим там.

Можем да го пуснем така:

db.v_pettypes.drop()

Сега, ако проверим колекциите, можем да видим, че оригиналният изглед е изчезнал, а новата колекция остава.

show collections

Резултат:

employees
owners
pets
pettypes
system.views

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Защо MongoDB е толкова бърз

  2. MongoDB отделно агрегиране

  3. Как да намерите документи, отговарящи на множество критерии

  4. Възможно ли е да се получи единичен резултат в съвкупност?

  5. Предоставя ли Mongoose достъп до предишната стойност на свойството в pre('save')?