IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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 tutoriál - Node.js

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

Tutoriál MongoDB databázy - Node.js

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).

Node.js

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.

Node.js

Ď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é 171x (2.46 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript

 

Predchádzajúci článok
Kompletné Restful API v Node.js
Všetky články v sekcii
Node.js
Preskočiť článok
(neodporúčame)
Prvé kroky v MongoDB
Článok pre vás napísal Petr Sedláček
Avatar
Užívateľské hodnotenie:
3 hlasov
Aktivity