Brno? Vypsali jsme pro vás nové termíny školení OOP v Brně!

Lekce 5 - Úvod do MongoDB

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Kompletní RESTful API v Node.js, jsme si za pomoci Expressu naimplementovali kompletní RESTful API. Data jsme ale ukládali jen do pole, takže jsme o ně při každém restartu aplikace přišli. Proto by se hodilo mít v projektu databázi, ve které by data byla uložena trvale.

Výběr databáze

Můžeme si vybrat z mnoha dostupných databází. Na jedné straně máme relační databáze (MySQL, MS-SQL a podobně), které používají tabulky a na data se dotazujeme pomocí SQL příkazů. Pro projekty v Nodu a Expressu se ale častěji používají tzv. ne-relační, nebo také dokumentově-orientované databáze. Nejznámější z nich je MongoDB.

MongoDB

MongoDB tutoriál

MongoDB patří mezi NoSQL databáze. Je objektově orientovaná, jednoduchá, dynamická a dobře škálovatelná. Místo tabulek (jako v relační databázi) používá kolekce, místo řádků a sloupců dokumenty a pole. Data se ukládají ve formátu JSON, což se nám hodí, protože naše data v JSON formátu už máme a nebudeme je muset nikam převádět. (Přesněji, na disku se ukládají jako BSON, což je binární JSON - to ale není moc důležité.) Data nemají předem daný formát (říká se, že MongoDB je schema-less). Objekty se mohou do sebe vnořovat, takže to, co byste museli v relační databázi řešit několika propojenými tabulkami, se v MongoDB dá vložit do jednoho dokumentu.

Instalace

Tutoriál MongoDB databáze

Na stránce https://www.mongodb.com klikněte vpravo nahoře na Try Free a vyberte záložku server. Měli byste mít předvybraný MongoDB Community Server. Dále vyberte verzi (resp. ponechejte tu předvybranou) a vyberte svůj operační systém. Balíček nechte MSI a stáhněte si instalátor. Typ instalace vyberte kompletní. Někdy během instalace se vás instalátor zeptá, jestli chcete nainstalovat i MongoDB Compass. Ten určitě chcete, jen může dělat problémy ho instalovat zároveň s databází - kdyby se to stalo, tak si databázi nainstalujte bez něj a doinstalujte ho pak samostatně. Dá se najít na stejné stránce v záložce Tools.

Domovská stránka MongoDB se často mění, takže všechno nemusí přesně odpovídat, ale stažení by mělo být vždy jednoduché. Pro začátek určitě chcete MongoDB Community Server a k němu přiinstalovat MongoDB Compass.

Nyní se v příkazovém řádku přesuňme do složky C:\Program Files\MongoDB\Server\4.0\bin (verzi si upravte podle aktuální verze vaší instalace) a spusťme MongoDB příkazem mongod:

cd C:\Program Files\MongoDB\Server\4.0\bin
mongod

Pro jednodušší používání se vyplatí přidat výše uvedenou cestu do proměnné PATH v proměnných prostředí. Postup se liší podle verze Windows, ve Win 10 je to v Ovládací panely > Systém a zabezpečení > Systém > Upřesnit nastavení systému (angl. View advanced system settings). Dále klikněte na proměnné prostředí, najděte proměnnou PATH, klikněte na Upravit..., dále na Nový a přidejte cestu k Mongu. Pak už jen třikrát Ok. Nyní by měl jít příkaz mongodb spustit odkudkoliv. (Pokud jste to nastavili správně a stále to nefunguje, zkuste restartovat příkazovou řádku.)

Po spuštění Monga se vám vypíše docela hodně věcí, a pokud jste Mongo nikdy dříve na svém počítači neměli, pravděpodobně vám vyhodí výjimku. Bude asi 4 řádky před koncem výpisu a bude obsahovat něco jako NonExistentPath: Data directory C:\data\db\ not found., terminating. Je to proto, že Mongo standardně ukládá svá data do adresáře c:\data\db. Pojďme ho tedy vytvořit:

md c:\data\db

Pak spusťte mongo znovu, nyní by již mělo běžet v pořádku a poslední zpráva by měla být, že čeká na portu 27017.

Spusťte nainstalovaný Compass, proklikejte se přes všechny "Next" a "Get Started", na připojovací stránce nechte výchozí nastavení (tj. localhost a port 27017) a připojte se. Měli byste vidět výchozí databáze Monga (určitě admin a local, možná ještě config).

Poznámky k instalaci na Macu

Na Macu si můžete instalaci zjednodušit pomocí Homebrew. Homebrew je balíčkovací manažer (něco jako npm) pro macOS a Linux. Nainstalujte si ho podle pokynů na webu https://brew.sh/. Nyní již můžete Mongo nainstalovat jednoduchým příkazem brew install mongodb. Nezapomeňte vytvořit adresář c:\data\db a doinstalovat Compass.

Alternativní řešení

Pokud nechcete, nemusíte Mongo stahovat vůbec. K dispozici je i takzvaná DBaaS (databáze jako služba, Database-as-a-Service), kdy můžete využít nějakou platformu, která vám nabídne hostovanou databázi.

Přímo se nabízí mLab (mlab.com) - k dispozici jsou různé balíčky, a ten zkušební (který pro první projekty úplně postačuje), je zdarma.

Dále, Mongo teď nově nabízí cloudovou službu Atlas, kde si také můžete hostovat své databáze zadarmo. Dá se najít přímo na hlavní stránce Monga. Pokud ji vyzkoušíte, můžete napsat do komentářů své zkušenosti, jsem na ně zvědavý.

Připojení k databázi

Pojďme si založit nový projekt. Do něj nainstalujeme balíček mongoose. Díky mongoose budeme schopni s Mongem pracovat přes jednoduché API:

mkdir mongo-projekt
cd mongo-projekt
npm init --yes
npm install mongoose

Vytvořte soubor index.js a do něj vložte následující kód:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/moviesdb', { useNewUrlParser: true })
  .then(() => console.log('Connected to MongoDB!'))
  .catch(error => console.error('Could not connect to MongoDB... ', error));

Nejdříve načteme modul mongoose a ve formě objektu ho uložíme do konstanty. Tento objekt má na sobě metodu connect(), která nám umožní připojit se k databázi. Jako první parametr bere připojovací řetězec. Nyní si ho nakódujeme staticky, v reálné aplikaci budete připojovací řetězec spíše načítat z konfiguračního souboru. Bude to tedy mongodb://localhost:27017/moviesdb, kde moviesdb je jméno databáze.

To, že naše databáze zatím neexistuje, vůbec nevadí. MongoDB ji při prvním připojení vytvoří.

Druhý parametr je pouze kvůli konfiguraci pro novější verze Monga (>=3.1.0).

Protože metoda connect() vrací tzv. příslib (Promise, viz poznámka na konci článku), můžeme na něm zavolat then() při úspěšném zavolání a catch() při chybě.

Nyní stačí již spustit (node index.js) a pokud je vše v pořádku, měla by se ukázat zpráva o úspěšném připojení.

Příště, v lekci První kroky v MongoDB, si řekneme něco více o mongoose a ukážeme si, jak pomocí něj zapisovat a číst data.

Poznámka na závěr: Přísliby (promises)

Pro asynchronní práci se v JavaScriptu od verze ES6 často používají takzvané přísliby (promises). Promise je něco jako příslib o budoucí hodnotě. A zrovna připojení k databázi je asynchronní (připojit se chvíli trvá, takže výsledek nevíme hned a musíme na něj počkat - ale díky asynchronicitě může další kód během čekání normálně běžet). Promise je jednou z možností, jak si s tím poradit (jinou by byla třeba syntaxe async/await, kterou použijeme někdy příště).

Promise může být ve třech stavech - čekající na výsledek (pending), splněný (fulfilled) a odmítnutý (rejected). Dále má na sobě then() metodu , jejímž parametrem je funkce - ta se zavolá v případě úspěšného splnění. A také metodu catch(), jejíž parametr (opět funkce) se zavolá v případě odmítnutí, tedy chyby.


 

Stáhnout

Staženo 11x (866 B)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

 

Aktivity (2)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!