Pokud máte pohled v databázi MongoDB, který byste raději sbírkou, jste na správném místě.
Níže je uveden příklad převodu pohledu na kolekci v MongoDB.
Příklad
Tento příklad ukazuje, jak převést pohled na kolekci pomocí databázových nástrojů MongoDB mongodump
a mongorestore
.
Pokud tyto nástroje nemáte nainstalované, podívejte se na instalační příručku MongoDB.
Najít zobrazení
Nejprve se podívejme na pohledy a kolekce v aktuální databázi:
show collections
Výsledek:
employees owners pets system.views v_pettypes
V tomto případě v_pettypes
je vlastně pohled.
Že se jedná o pohled, můžeme ověřit pomocí následujícího dotazu:
db.getCollectionInfos( { "name": "v_pettypes"} )
Výsledek:
[ { "name" : "v_pettypes", "type" : "view", "options" : { "viewOn" : "pets", "pipeline" : [ { "$group" : { "_id" : "$type" } } ] }, "info" : { "readOnly" : true } } ]
Víme, že jde o zobrazení, protože type
pole má hodnotu view
.
Převést zobrazení na kolekci
Nyní můžeme pokračovat a převést tento pohled na kolekci. Můžeme to udělat pomocí databázových nástrojů MongoDB mongodump
a mongorestore
.
Použijeme mongodump
exportovat zobrazení a mongorestore
jej obnovit. Konkrétně zavedeme mongodump
výstupní stream do mongorestore
. Tímto způsobem můžeme udělat celou věc najednou.
Zde je kód:
mongodump --archive --db=PetHotel --collection=v_pettypes --viewsAsCollections | mongorestore --archive --nsFrom='PetHotel.v_pettypes' --nsTo='PetHotel.pettypes'
Tento kód musíte spustit z příkazového řádku vašeho systému (např. nový terminál nebo okno příkazového řádku). Nespouštějte jej z mongo
skořápka.
Spuštěním tohoto kódu byly převedeny v_pettypes
zobrazit kolekci nazvanou pettypes
ve stejné databázi.
Přesněji řečeno, ve skutečnosti jsme nekonvertovali pohled na sbírku. Jednoduše jsme použili --viewsAsCollections
argument vypsat pohled jako kolekci, pak jsme tuto kolekci obnovili zpět do databáze. Původní pohled tedy stále existuje.
Když exportujete pohled jako kolekci, mongodump
vytvoří soubor BSON obsahující dokumenty v pohledu. Pokud používáte mongorestore
pro obnovení vytvořeného souboru BSON bude pohled obnoven jako kolekce.
Bez použití --viewsAsCollections
argument, mongodump
exportuje metadata každého pohledu. Pokud zahrnete soubor metadat zobrazení do mongorestore
operace, pohled se znovu vytvoří.
Pomocí --viewsAsCollections
také vynechává všechny standardní kolekce.
Zkontrolujte výsledky
Pojďme se znovu podívat na naše pohledy a sbírky.
show collections
Výsledek:
employees owners pets pettypes system.views v_pettypes
Můžeme tedy vidět novou kolekci s názvem pettypes
existuje a stále existuje původní zobrazení.
Můžeme ověřit, že pettypes
je kolekce (a nikoli pohled) takto:
db.getCollectionInfos( { "name": "pettypes"} )
Výsledek:
[ { "name" : "pettypes", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("d183c7e4-44bc-4656-b272-7ad707f8dc62") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } } ]
Vidíme, že type
pole obsahuje hodnotu collection
, což znamená, že se jedná o sbírku.
Vypustit původní zobrazení
V této fázi máme nyní na výběr, zda původní pohled smažeme, nebo jej tam necháme.
Můžeme to zahodit takto:
db.v_pettypes.drop()
Když nyní zkontrolujeme kolekce, můžeme vidět, že původní zobrazení je pryč a nová kolekce zůstává.
show collections
Výsledek:
employees owners pets pettypes system.views