Úvod
MongoDB používá k ukládání, správě a zpracování dat struktury orientované na dokumenty. Jednotlivé dokumenty jsou organizovány do kolekcí, které jsou zase uloženy v databázích. Protože schéma každého dokumentu není definováno statickým schématem, systémy založené na dokumentech nabízejí větší flexibilitu než relační systémy, které se skládají z tabulek a záznamů.
V této příručce si povíme, jak vytvořit a spravovat struktury, které MongoDB používá k organizaci dat. Probereme, jak vytvářet a spravovat databáze a poté, jak vytvářet sbírky, které obsahují podobné nebo související dokumenty.
Jak zobrazit existující databáze
Než začneme vytvářet nové databáze, je užitečné seznámit se s některými metodami, které MongoDB poskytuje pro vyhledávání informací o existujících databázích. To vám může pomoci porozumět aktuálnímu stavu systému, než začnete provádět změny.
Chcete-li zobrazit všechny databáze v systému, ke kterým máte přístup, použijte show dbs
metoda:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
MongoDB odpoví s názvy všech dostupných databází v systému a také souhrnem jejich aktuálního úložného prostoru.
Chcete-li zjistit, na které databázi jste aktuálně nastaveni, použijte db.getName()
příkaz nebo jeho zkrácený alias, db
:
db
test
Možná zjistíte, že aktuálně používáte databázi, která nebyla uvedena v seznamu show dbs
příkaz. Je to proto, že v MongoDB, dokud nezapíšete první dokument do databáze, databáze ve skutečnosti není vytvořena. Takže ve výše uvedeném příkladu je shell připraven pracovat na test
databáze, ale protože ještě neexistuje, nebude vrácena show dbs
příkaz.
Chcete-li přepnout na jinou databázi, můžete použít use
příkaz:
use admin
switched to db admin
Chcete-li získat základní informace o vaší aktuální databázi, můžete použít db.stats()
metoda:
db.stats()
{ "db" : "admin", "collections" : 3, "views" : 0, "objects" : 4, "avgObjSize" : 278.25, "dataSize" : 1113, "storageSize" : 86016, "indexes" : 5, "indexSize" : 147456, "totalSize" : 233472, "scaleFactor" : 1, "fsUsedSize" : 2876923904, "fsTotalSize" : 25832407040, "ok" : 1}
Výstup zobrazuje informace o počtu kolekcí v databázi, statistiky úložiště, informace o indexu a další.
Jak vytvářet databáze
MongoDB nemá explicitní příkaz pro vytvoření nové databáze. Místo toho, jak již bylo zmíněno dříve, musíte místo toho naznačit MongoDB, že chcete zapisovat nové dokumenty do nové databáze. Když jsou tyto dokumenty vytvořeny, implicitně vytvoří databázi.
Chcete-li připravit MongoDB na zápis do nové databáze, zadejte use
příkaz pro přepnutí do neexistující databáze.
Zde nastavíme MongoDB k vytvoření nové databáze s názvem playground
:
use playground
switched to db playground
Pokud zkontrolujete svou aktuální databázi, potvrdí, že playground
Database je aktuálně cílem příkazů souvisejících s databází:
db
playground
Nicméně, jak již bylo zmíněno dříve, protože jsme ještě nevytvořili žádné dokumenty, nebyla vytvořena ani samotná databáze:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Abychom skutečně vytvořili novou databázi, musíme nejprve něco vytvořit.
Jak zobrazit sbírky v databázi
V MongoDB, kolekce jsou struktury používané k seskupování dokumentů pomocí jakéhokoli systému kategorizace, který chcete implementovat. Žijí v databázích a ukládají dokumenty.
Dostupné kolekce v databázi, kterou aktuálně používáte, můžete zobrazit pomocí show collections
metoda.
Zde se přepneme na admin
databáze, která má k dispozici některé kolekce k předvedení:
use adminshow collections
system.rolessystem.userssystem.version
Případně můžete načíst stejné názvy kolekcí v poli pomocí db.getCollectionNames()
metoda:
db.getCollectionNames()
[ "system.roles", "system.users", "system.version" ]
Chcete-li zobrazit další informace o kolekcích v aktuální databázi, použijte db.getCollectionInfos()
metoda:
db.getCollectionInfos()
[ { "name" : "system.roles", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("776b1fd7-6014-4191-b33c-21350b590627") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.users", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("8c824fd1-2150-4413-8fac-0b77d16505e5") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }, { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Příkazu můžete také volitelně předat dokument k filtrování výsledků. Například pokud máte zájem pouze o zobrazení informací o system.version
kolekce, můžete napsat:
db.getCollectionInfos( { name: "system.version" })
[ { "name" : "system.version", "type" : "collection", "options" : { }, "info" : { "readOnly" : false, "uuid" : UUID("7501483a-45cc-492e-a1fd-ccb4349650cb") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Chcete-li zkontrolovat, kolik dokumentů obsahuje kolekce, použijte db.<collection>.count()
metoda. Například následující příkaz zkontroluje, kolik dokumentů je v system.users
kolekce:
db.system.users.count()
2
Chcete-li zobrazit základní statistiky o kolekcích v aktuální databázi, použijte db.printCollectionStats()
metoda:
db.printCollectionStats()
Příkaz může vydávat více informací, než můžete snadno spotřebovat, ale obsahuje, ale je užitečný v některých scénářích, kdy se potřebujete podrobně podívat na charakteristiky kolekce.
Jak vytvářet sbírky
Chcete-li vytvořit novou sbírku, existují dvě možnosti:sbírky můžete vytvářet implicitně nebo explicitně.
Stejně jako u databází může MongoDB automaticky vytvářet kolekce, když je do nich poprvé zapsán dokument. Tato metoda říká MongoDB, aby vytvořila novou kolekci vložením dokumentu do kolekce, která ještě neexistuje.
Můžeme se například vrátit zpět na playground
databáze, o kterou jsme se dříve zajímali. Jakmile jsme v tomto jmenném prostoru, můžeme vložit nový dokument do kolekce voláním insert.()
příkaz na jméno, které bychom chtěli použít pro novou kolekci. Zde můžeme vytvořit dokument o snímku v nové kolekci s názvem equipment
:
use playgrounddb.equipment.insert({name: "slide"})
switched to db playgroundWriteResult({ "nInserted" : 1 })
Výstup označuje, že byl napsán jeden dokument. Výše uvedený příkaz provedl tři samostatné akce. Nejprve MongoDB vytvořil playground
databázi, na kterou jsme odkazovali v našem use
příkaz. Vytvořilo také equipment
kolekce v rámci databáze, protože voláme insert()
příkaz na tento název kolekce. Nakonec vytvoří skutečný dokument v rámci equipment
sběr pomocí vstupu, který jsme poskytli do insert()
příkaz.
Provedení všech těchto akcí můžete ověřit pomocí následujících příkazů:
show dbsshow collectionsdb.equipment.count()db.equipment.find()
Výstup by měl ukazovat, že playground
databáze je nyní mezi uvedenými databázemi, které equipment
kolekce je uvedena, že v rámci equipment
existuje jeden dokument kolekce a že dokument je {name: "slide"}
dokument, který jsme vložili do příkazu.
Další možností, jak vytvořit kolekce, je explicitně použít db.createCollection()
metoda. To vám umožňuje vytvářet kolekce, aniž byste do nich přidávali jakékoli dokumenty.
Můžete například vytvořit novou kolekci na playground
databáze s názvem maintenance.requests
zadáním:
db.createCollection("maintenance.requests")
{ "ok" : 1 }
Můžeme ověřit, že se nová kolekce zobrazí, když ji zadáme, ale že nemá žádné dokumenty:
show collectionsdb.maintenance.requests.count()
equipmentmaintenance.requests0
db.createCollection()
Metoda je primárně užitečná, protože umožňuje zadat různé možnosti při vytváření. Můžeme například chtít vytvořit vytvoření omezené kolekce , což je kolekce, která udržuje horní limit své přidělené velikosti, kterou ukládá, tím, že po zaplnění smaže svůj nejstarší dokument.
Chcete-li vytvořit omezenou kolekci s názvem notifications
který může uložit maximálně 10240 bajtů informací, můžete zavolat:
db.createCollection( "notifications", { capped: true, size: 10240 })
{ "ok" : 1}
Tím se vytvoří omezené notification
kolekce, kterou můžeme ověřit zadáním:
db.getCollecitonInfos({"options.capped": true})
[ { "name" : "notifications", "type" : "collection", "options" : { "capped" : true, "size" : 10240 }, "info" : { "readOnly" : false, "uuid" : UUID("dff7bfb0-1cfc-4170-ba60-fbb834ac6925") }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } }]
Jak smazat sbírky
Chcete-li smazat sbírku, můžete použít drop()
metoda na samotný sběr.
Chcete-li například vypustit omezená notification
kolekce, kterou jsme vytvořili, můžete zadat:
db.notifications.drop()
true
Úspěšnost operace můžete ověřit opětovným uvedením kolekcí v aktuální databázi:
show collections
equipmentmaintenance.requests
Jak smazat databáze
Chcete-li odstranit celou databázi, zavolejte db.dropDatabase()
příkaz. Toto smaže aktuální databázi, takže se před provedením ujistěte, že jste ve správné databázi:
use playgrounddb.dropDatabase()
switched to db playground{ "dropped" : "playground", "ok" : 1 }
Pokud zkontrolujete seznam dostupných databází, playground
se již nezobrazuje:
show dbs
admin 0.000GBconfig 0.000GBlocal 0.000GB
Protože jsme ještě nepřešli na novou databázi, MongoDB je stále nastaven tak, aby vytvořil playground
Pokud se rozhodneme přidat novou kolekci nebo dokument. Můžete to ověřit pomocí db
příkaz:
db
playground
Závěr
Vytváření a správa databází a kolekcí je důležitou dovedností při používání MongoDB. Tyto základní organizační nástroje vám umožňují seskupit související dokumenty, dotazovat se na podmnožiny informací a nastavit zásady autorizace pro různé typy dat. Seznámení s tím, jak efektivně spravovat tyto struktury, vám umožní spravovat svá data efektivněji s menším počtem překvapení.