IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 5 - Úvod do MongoDB

V minulé lekci, Kompletní RESTful API v Node.js, jsme si za pomoci Expressu naimplementovali kompletní RESTful API.

V dnešním Node.js tutoriálu si nainstalujeme databázi. Dosud jsme data pouze ukládali do pole, takže jsme o ně při každém restartu aplikace přišli. Díky MongoDB budou naše filmová data uložena trvale. Nakonec si vysvětlíme tzv. přísliby - promises.

Výběr databáze

Na výběr máme mnoho 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 Node.js a Express 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 - Node.js - Serverový JavaScript

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 a místo řádků a sloupců pak 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 se na disku ukládají jako BSON, což je binární JSON.

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 bychom museli v relační databázi řešit několika propojenými tabulkami, se v MongoDB dá vložit do jednoho dokumentu. Výhodou je vyšší rychlost a variabilita dat, které nemusí "pasovat" do předem daných tabulek. Nevýhodou je potom vyšší míra anarchie v uložených datech.

Instalace MongoDB

Nejprve nainstalujeme MongoDB Community Server a k němu poté i aplikaci MongoDB Compass, která slouží ke správě databáze. Na stránce MongoDB klikneme v menu na Products > Community Server. Dále vybereme verzi 6 a svůj operační systém. Balíček zvolíme MSI a stáhneme si instalátor tlačítkem Download:

Tutoriál MongoDB databáze - Node.js - Serverový JavaScript

Pozor, dodržuj přesné verze komponent! Pokročilé projekty jako tento jsou složené z komponent. Možná by tě napadlo použít nejnovější verzi nějaké komponenty, co zrovna včera vyšla. Projekt ti pak ale bez odborné úpravy pravděpodobně nebude fungovat! U verzí komponent neplatí jako např. u aktualizace Windows, že chceme každý den používat tu nejnovější. Neustálé aktualizace všeho by totiž vyžadovaly každodenní a komplexní změny kódu projektu a reálně se tak neprovádějí. Ze stejného důvodu i my aktualizujeme kurzy v pravidelných intervalech a nové verze k sobě pak sladíme tak, aby vše fungovalo.

Instalátor spustíme. Až se nás zeptá na typ instalace, vybereme kompletní. Ponecháme předvolby předvyplněné instalátorem a potvrdíme. V průběhu instalace se instalátor rovněž zeptá, zda má nainstalovat i MongoDB Compass. Nabídku potvrdíme a pokračujeme dále v instalaci.

V ojedinělých případech se nepodaří nainstalovat MongoDB Compass společně s databází. Pokud se tak stane, přejdeme zpět na stránku MongoDB a v menu klikneme na Products > Tools > Compass. Stáhneme instalátor a provedeme instalaci dodatečně.

MongoDB se nainstaluje jako service (služba). To znamená, že ji nemusíme spouštět manuálně. Manuálnímu spuštění může běžící služba naopak bránit.

Manuální spuštění MongoDB

Může se stát, že se MongoDB samo nespustí a musíme ho spustit manuálně. V příkazovém řádku se příkazem cd přesuňme do složky C:\Program Files\MongoDB\Server\6.0\bin (verzi upravíme podle aktuální verze instalace) a spusťme MongoDB příkazem mongod:

cd C:\Program Files\MongoDB\Server\6.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 klikneme na Ovládací panely > Systém a zabezpečení > Systém > Upřesnit nastavení systému. Dále přejdeme na proměnné prostředí, najdeme proměnnou PATH a klikneme na Upravit. Poté klikneme na Nový a přidáme cestu k MongoDB. Pak už jen třikrát klikneme na OK čímž změnu potvrdíme. Nyní půjde příkaz mongod spustit odkudkoliv :-)

Pokud máme vše nastavené správně a příkaz stále nefunguje, příkazovou řádku ukončíme a spustíme znovu.

Nyní nám vše běží a v příkazovém řádku vidíme, že MongoDB čeká na portu 27017.

Alternativní řešení

Pokud nechceme, nemusíme MongoDB stahovat vůbec. K dispozici je i takzvaná DBaaS (databáze jako služba, Database-as-a-Service), kdy můžeme využít online platformu, která nám nabídne hostovanou databázi.

Přímo se nabízí cloudová služba Atlas, kde si můžeme hostovat své databáze zadarmo.

Vyzkoušení v MongoDB Compass

Po instalaci se spustí aplikace Compass, případně ji můžete spustit i sami. V poli URI by se měl nacházet řetězec mongodb://localhost:27017 pro připojení k databázi, případně jej tam doplňte. Klikneme na tlačítko Connect:

Připojení k MongoDB. - Node.js - Serverový JavaScript

Po připojení uvidíme v kartě Databases seznam s výchozími databázemi:

Přehled výchozích MongoDB databází. - Node.js - Serverový JavaScript

Založení projektu

Založíme si nový adresář mongodb-movie-api/a otevřeme v něm nové okno příkazové řádky. Budeme používat balíčkovací systém npm pro jehož inicializaci zadáme do příkazové řádky:

npm init --yes

Následně nainstalujeme balíček mongoose. Díky mongoose budeme schopni s Mongem pracovat přes jednoduché API:

npm install mongoose@~6.6.0

Připojení k MongoDB

Teď už se pojďme připojit k databázi. V projektu si vytvoříme nový index.js a do něj vložíme následující kód:

const mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1: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.

V reálné aplikaci se bude připojovací řetězec načítat z konfiguračního souboru.

My si ho pro zjednodušení nakódujeme staticky. Bude to tedy mongodb://127.0.0.1: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 MongoDB (>=3.1.0). Protože metoda connect() vrací tzv. příslib (promise), můžeme na něm zavolat then() při úspěšném zavolání a catch() při chybě.

Nyní aplikaci spustíme. Pro spuštění aplikace zadáme do příkazové řádky:

node index.js

V příkazové řádce se poté ukáže zpráva o úspěšném připojení:

Windows PowerShell
Connected to MongoDB!

Přísliby (promises)

Pro asynchronní práci se v JavaScriptu často používají takzvané přísliby (promises), se kterými jsme se již setkali v lekci Promisy v JavaScriptu. 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. Další by byla třeba syntaxe async/await.

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. To je pro dnešní lekci vše :-)

Příště, v lekci První kroky v MongoDB, si ukážeme, jak vytvářet MongoDB schémata a kompilovat je do modelů. Zjistíme také, jak vytvářet nové dokumenty v kolekci a jak vrátit všechny dokumenty z kolekce.


 

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 152x (2.46 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

Předchozí článek
Kompletní RESTful API v Node.js
Všechny články v sekci
Node.js - Serverový JavaScript
Přeskočit článek
(nedoporučujeme)
První kroky v MongoDB
Článek pro vás napsal Petr Sedláček
Avatar
Uživatelské hodnocení:
161 hlasů
Aktivity