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