Lekce 5 - Úvod do MongoDB
V minulé lekci, Kompletní RESTful API v Node.js, jsme si za pomoci Expressu naimplementovali kompletní RESTful API.
Dosud jsme data pouze ukládali 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 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

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ář databáze 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í.
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.
Příště, v lekci První kroky v MongoDB, si řekneme něco o mongoose
a
ukážeme si, jak pomocí něj zapisovat a číst data.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 38x (866 B)
Aplikace je včetně zdrojových kódů v jazyce JavaScript
Komentáře


Zobrazeno 6 zpráv z 6.