5. diel - Úvod do MongoDB
V minulej lekcii, Kompletné Restful API v Node.js , sme si za pomoci Expressu naimplementovali kompletnú Restful API. Dáta sme ale ukladali len do poľa, takže sme o ne pri každom reštarte aplikácie prišli. Preto by sa hodilo mať v projekte databáze, v ktorej by dáta bola uložená trvalo.
Výber databázy
Môžeme si vybrať z mnohých dostupných databáz. Na jednej strane máme relačnej databázy (MySQL, MS-SQL a podobne), ktoré používajú tabuľky a na dáta sa pýtame pomocou SQL príkazov. Pre projekty v Nodu a Expressu sa ale častejšie používajú tzv. Ne-relačná, alebo tiež dokumentovo-orientované databázy. Najznámejší z nich je MongoDB.
MongoDB
MongoDB patrí medzi NoSQL databázy. Je objektovo orientovaná, jednoduchá, dynamická a dobre škálovateľná. Namiesto tabuliek (ako v relačnej databáze) používa kolekcia, miesto riadkov a stĺpcov dokumenty a polia. Dáta sa ukladajú vo formáte JSON, čo sa nám hodí, pretože naše dáta v JSON formáte už máme a nebudeme ich musieť nikam prevádzať. (Presnejšie, na disku sa ukladajú ako BSON, čo je binárny JSON - to ale nie je veľmi dôležité.) Dáta nemajú vopred daný formát (hovorí sa, že MongoDB je schéma-less). Objekty sa môžu do seba Vnorovy, takže to, čo by ste museli v relačnej databáze riešiť niekoľkými prepojenými tabuľkami, sa v MongoDB dá vložiť do jedného dokumentu.
Inštalácia
Na stránke https://www.mongodb.com
kliknite vpravo hore na Try Free
a vyberte záložku server. Mali
by ste mať predvybrané MongoDB Community Server. Ďalej vyberte verziu (resp.
Ponechajte tú predvybranú) a vyberte svoj operačný systém. Balíček
nechajte MSI a stiahnite si inštalátor. Typ inštalácie vyberte kompletný.
Niekedy počas inštalácie sa vás inštalátor spýta, či chcete
nainštalovať aj MongoDB Compass. Ten určite chcete, len môže robiť
problémy ho inštalovať zároveň s databázou - keby sa to stalo, tak si
databázu nainštalujte bez neho a doinštalujte ho potom samostatne. Dá sa
nájsť na rovnakej stránke v záložke Tools.
Domovská stránka MongoDB sa často mení, takže všetko nemusí presne zodpovedať, ale stiahnutie by malo byť vždy jednoduché. Pre začiatok určite chcete MongoDB Community Server ak nemu doinštalovať MongoDB Compass.
Teraz sa v príkazovom riadku presuňme do priečinka
C:\Program Files\MongoDB\Server\4.0\bin
(verziu si upravte podľa
aktuálnej verzie vašej inštalácie) a spustí MongoDB príkazom
mongod
:
cd C:\Program Files\MongoDB\Server\4.0\bin mongod
Pre jednoduchšie používanie sa oplatí pridať vyššie uvedenú cestu do
premennej PATH
v premenných prostredia. Postup sa líši podľa
verzie Windows, vo Win 10 je to v Ovládací panel> Systém a
zabezpečenie> Systém> Rozšírené nastavenie systému (angl. View
advanced system settings). Ďalej kliknite na premenné prostredie, nájdite
premennú PATH
, kliknite na Upraviť ..., ďalej na Nový a
pridajte cestu k Mongu. Potom už len trikrát Ok. Teraz by mal ísť príkaz
mongodb
spustiť odkiaľkoľvek. (Ak ste to nastavili správne a
stále to nefunguje, skúste reštartovať príkazový riadok.)
Po spustení Monga sa vám vypíše celkom veľa vecí, a ak ste Mongo nikdy
predtým na svojom počítači nemali, pravdepodobne vám vyhodí výnimku. Bude
asi 4 riadky pred koncom výpisu a bude obsahovať niečo ako
NonExistentPath: Data directory C:\data\db\ not found., terminating
.
Je to preto, že Mongo štandardne ukladá svoje dáta do adresára
c:\data\db
. Poďme ho teda vytvoriť:
md c:\data\db
Potom spustite mongo znova, teraz by už malo bežať v poriadku a posledná
správa by mala byť, že čaká na porte 27017
.
Spustite nainštalovaný Compass, preklikajte sa cez všetky "Next" a "Get
Started", na pripojovacie stránke nechajte predvolené nastavenia (tj.
localhost
a port 27017
) a pripojte sa. Mali by ste
vidieť predvolené databázy Monga (určite admin
a
local
, možno ešte config
).
Poznámky k inštalácii na Macu
Na Macu si môžete inštaláciu zjednodušiť pomocou Homebrew. Homebrew je
balíčkovací manažér (niečo ako NPM) pre MacOS a Linux. Nainštalujte si ho
podľa pokynov na webe https://brew.sh/
. Teraz už môžete Mongo
nainštalovať jednoduchým príkazom brew install mongodb
.
Nezabudnite vytvoriť adresár databázy a doinštalovať Compass.
Alternatívne riešenie
Ak nechcete, nemusíte Mongo sťahovať vôbec. K dispozícii je aj takzvaná DBaaS (databázy ako služba, Database-as-a-Service), kedy môžete využiť nejakú platformu, ktorá vám ponúkne hostovanú databázu.
Priamo sa ponúka MLAB (mlab.com
) - k dispozícii sú rôzne
balíčky, a ten skúšobný (ktorý pre prvé projekty úplne postačuje), je
zadarmo.
Ďalej, Mongo teraz novo ponúka cloudovú službu Atlas, kde si tiež môžete hosťovať svoje databázy zadarmo. Dá sa nájsť priamo na hlavnej stránke Monga. Pokiaľ ju vyskúšate, môžete napísať do komentárov svoje skúsenosti, som na ne zvedavý.
Pripojenie databázy
Poďme si založiť nový projekt. Do neho nainštalujeme balík
mongoose
. Vďaka mongoose
budeme schopní s Mong
pracovať cez jednoduché API:
mkdir mongo-projekt cd mongo-projekt npm init --yes npm install mongoose
Vytvorte súbor index.js
a do neho vložte nasledujúci
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));
Najskôr načítame modul mongoose
a vo forme objektu ho
uložíme do konštanty. Tento objekt má na sebe metódu
connect()
, ktorá nám umožní pripojiť sa k databáze. Ako prvý
parameter berie pripojovací reťazec. Teraz si ho nakódujeme staticky, v
reálnej aplikácii budete pripojovací reťazec skôr načítavať z
konfiguračného súboru. Bude to teda
mongodb://localhost:27017/moviesdb
, kde moviesdb
je
meno databázy.
To, že naše databázy zatiaľ neexistuje, vôbec nevadí. MongoDB ju pri prvom pripojení vytvoria.
Druhý parameter je len kvôli konfigurácii pre novšie verzie Monga (> = 3.1.0).
Pretože metóda connect()
vracia tzv. Prísľub
(Promise, pozri poznámku na konci článku), môžeme na ňom zavolať
then()
pri úspešnom zavolaní a catch()
pri
chybe.
Teraz stačí už spustiť (node index.js
) a ak je všetko v
poriadku, mala by sa ukázať správa o úspešnom pripojení.
Nabudúce, v lekcii Prvé kroky v MongoDB , si povieme niečo viac o mongoose
a
ukážeme si, ako pomocou neho zapisovať a čítať dáta.
Poznámka na záver: Prísľuby (promises)
Pre asynchrónne prácu sa v JavaScripte od verzie ES6 často
používajú takzvané prísľuby (promises). Promise je niečo ako prísľub o
budúcej hodnote. A zrovna pripojenia k databáze je asynchrónny (pripojiť sa
chvíľu trvá, takže výsledok nevieme hneď a musíme na neho počkať - ale
vďaka asynchronicitě môže ďalšie kód počas čakania normálne bežať).
Promise
je jednou z možností, ako si s tým poradiť (inú by
bola treba syntaxe async/await
, ktorú použijeme niekedy
nabudúce).
Promise
môže byť v troch stavoch - čakajúci na
výsledok (pending), splnený (fulfilled) a odmietnutím (rejected). Ďalej má
na sebe then()
metódu, ktorej parametrom je funkcia - tá sa
zavolá v prípade úspešného splnenia. A tiež metódu catch()
,
ktorej parameter (opäť funkcia) sa zavolá v prípade odmietnutia, teda
chyby.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 169x (2.46 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript