Ако имате изглед в база данни на 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