Node.js MongoDB Vodič s primjerima
⚡ Pametni sažetak
Node.js MongoDB Integracija omogućuje Node aplikaciji povezivanje s NoSQL bazom podataka, pokretanje CRUD operacija i izlaganje živih zapisa putem Express ruta, koristeći izvorni mongodb upravljački program zajedno s Mongooseom za modeliranje podataka temeljeno na shemi.

Većinom sve moderne web aplikacije imaju neku vrstu sustava za pohranu podataka na pozadini. Na primjer, ako uzmemo slučaj web trgovineping aplikacije, podaci poput cijene artikla bili bi pohranjeni u bazi podataka.
Okvir Node js može raditi s bazama podataka s obje relacijske (kao što je Oracle i MS SQL Server) i nerelacijske baze podataka (kao što je MongoDB). U ovom vodiču ćemo vidjeti kako možemo koristiti baze podataka unutar Node js aplikacija.
Node.js i NoSQL baze podataka
Tijekom godina, NoSQL baze podataka kao što su MongoDB i relacijske baze podataka kao što su MySQL postale su prilično popularne kao baze podataka za pohranu podataka. Sposobnost ovih baza podataka da pohranjuju bilo koju vrstu podataka, a posebno u bilo kojem formatu, ono je što ih čini tako široko korištenima.
Node.js ima mogućnost rada s oba MySQL i MongoDB kao baze podataka. Kako biste koristili bilo koju od ovih baza podataka, morate preuzeti i koristiti potrebne module pomoću upravitelja paketa Node.
Za MySQL, potreban modul se zove „mysql“. Za MongoDB, programeri mogu instalirati ili službenu izvornu verziju mongodb upravljački program, što je paket koji se koristi u primjerima koda u ovom članku, ili biblioteka temeljena na shemi kao što je Mungos kada aplikaciji treba više strukture.
S ovim modulima možete izvoditi sljedeće operacije u Node.js
- Upravljanje skupljanjem veza – Ovdje možete odrediti broj MySQL veze s bazom podataka koje treba održavati i spremati Node.js.
- Stvorite i zatvorite vezu s bazom podataka. U oba slučaja, možete osigurati funkciju povratnog poziva koja se može pozvati kad god se izvrše metode povezivanja "stvori" i "zatvori".
- Upiti se mogu izvršiti za dobivanje podataka iz odgovarajućih baza podataka za dohvaćanje podataka.
- Manipulacija podacima, poput umetanja podataka, brisanja i ažuriranja podataka također se može postići pomoću ovih modula.
Za preostale teme, pogledat ćemo kako možemo raditi s njima MongoDB baze podataka unutar Node.js, počevši s brzom usporedbom dvaju najčešćih načina razgovora s MongoDB iz Node.js projekta.
MongoDB Native Driver u odnosu na Mongoose u Node.js-u
Nazivi modula spomenuti gore mogu biti zbunjujući jer Node.js nudi dva različita načina komunikacije s MongoDBdomorodac mongodb vozač i Mungos ODM (biblioteka za modeliranje objektnih podataka). Svaki primjer koda kasnije u ovom članku koristi izvorni upravljački program, instaliran s npm instalirajte mongodb i pristupa se putem MongoClientMongoose obavija isti taj upravljački program i dodaje definicije sheme, validaciju i metode modela za višekratnu upotrebu, što odgovara većim aplikacijama kojima je potrebna predvidljiva struktura podataka u mnogim kolekcijama. Razumijevanje razlike unaprijed izbjegava zbrku prilikom instaliranja paketa ili čitanja drugih Node.js-ova. MongoDB primjeri na mreži. Tablica u nastavku uspoređuje obje opcije kako bi programer mogao odabrati pravi alat za određeni projekt.
| Aspekt | Izvorni MongoDB upravljački program | Mungos |
|---|---|---|
| Montaža | npm instalirajte mongodb | npm instalacija mungosa |
| Provedba sheme | Ništa, dokumenti ostaju fleksibilni | Definirano putem Schema objekta |
| Krivulja ucenja | Niže, bliže sirovom MongoDB upita | Viši, dodaje vlastiti API sloj |
| Najbolje za | Mali skripti i kod osjetljiv na performanse | Veće aplikacije s konzistentnim modelima podataka |
Savjet: Držite se izvornog upravljačkog programa dok učite jezgru MongoDB naredbe, a zatim prijeđite na Mungos nakon što aplikaciji treba validacija sheme u više kolekcija.
Korištenje MongoDB i Node.js
Nakon što je terminologija razjašnjena, ostatak ovog članka koristi isključivo izvorni upravljački program, točno onako kako se pojavljuje u primjerima koda u nastavku. Kao što je objašnjeno u prethodnoj temi, MongoDB je jedna od najpopularnijih baza podataka koja se koristi uz Node.js.
U ovom poglavlju ćemo vidjeti kako uspostaviti veze s MongoDB baze podataka i kako izvoditi normalne operacije čitanja podataka iz baze podataka, kao i umetanje, brisanje i ažuriranje zapisa u MongoDB baza podataka.
Za potrebe ovog poglavlja, pretpostavimo da imamo sljedeće MongoDB podaci na mjestu.
Naziv baze podataka: EmployeeDB
Naziv zbirke: Zaposlenik
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Instaliranje NPM modula
Potreban vam je upravljački program za pristup Mongu iz aplikacije Node. Dostupni su brojni Mongo drajveri, ali MongoDB je među najpopularnijima. Za instaliranje MongoDB modula, pokrenite naredbu u nastavku
npm instalirajte mongodb
- Stvaranje i zatvaranje veze s a MongoDB baza podataka. Donji isječak koda pokazuje kako stvoriti i zatvoriti vezu s a MongoDB baza podataka.
Code Objašnjenje:
- Prvi korak je uključiti MongoDB modul upravljačkog programa, što se radi putem funkcije require. Nakon što je ovaj modul instaliran, možemo koristiti potrebne funkcije dostupne u ovom modulu za stvaranje veza s bazom podataka.
- Zatim specificiramo niz povezivanja s bazom podataka. U nizu za povezivanje postoje 3 ključne vrijednosti koje se prosljeđuju.
- Prvi je 'mongodb' koji specificira da se povezujemo na mongoDB bazu podataka.
- Sljedeći je 'localhost' što znači da se povezujemo s bazom podataka na lokalnom računalu.
- Sljedeći je 'EmployeeDB' što je naziv baze podataka definirane u našem MongoDB baza podataka.
- Sljedeći korak je zapravo povezivanje s našom bazom podataka. Funkcija connect uzima u obzir naše URL i ima mogućnost specificiranja povratne funkcije. Pozvat će se kada se otvori veza s bazom podataka. To nam daje priliku da znamo je li veza s bazom podataka bila uspješna ili ne.
- U funkciji pišemo niz "Veza uspostavljena" na konzolu kako bismo označili da je uspostavljena uspješna veza.
- Na kraju, vezu zatvaramo pomoću naredbe db.close.
Ako se gornji kod ispravno izvede, niz "Connected" bit će zapisan na konzoli kao što je prikazano u nastavku.
- Upit za podatke u a MongoDB baza podataka - Koristiti MongoDB vozač također možemo dohvatiti podatke iz MongoDB baza podataka. U donjem odjeljku pokazat će se kako možemo koristiti upravljački program za dohvaćanje svih dokumenata iz naše kolekcije zaposlenika u našoj bazi podataka EmployeeDB. Ovo je kolekcija u našoj MongoDB baza podataka koja sadrži sve dokumente vezane uz zaposlenike. Svaki dokument ima ID objekta, Ime zaposlenika i ID zaposlenika za definiranje vrijednosti dokumenta.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); cursor.each(function(err, doc) { console.log(doc); }); });
Code Objašnjenje:
- U prvom koraku stvaramo kursor (kursor je pokazivač koji se koristi za pokazivanje na različite zapise dohvaćene iz baze podataka. Kursor se zatim koristi za iteraciju kroz različite zapise u bazi podataka. Ovdje definiramo varijablu pod nazivom kursor koja će se koristiti za pohranjivanje pokazivača na zapise dohvaćene iz baze podataka) koja pokazuje na zapise koji su dohvaćeni iz MongoDb kolekcije. Također imamo mogućnost određivanja kolekcije 'Zaposlenik' iz koje se dohvaćaju zapisi. Funkcija find() koristi se za određivanje da želimo dohvatiti sve dokumente iz MongoDB skup.
- Sada ponavljamo kroz kursor i za svaki dokument u kursoru ćemo izvršiti funkciju.
- Naša funkcija jednostavno će ispisati sadržaj svakog dokumenta na konzolu.
Bilješka: - Također je moguće dohvatiti određeni zapis iz baze podataka. To se može učiniti određivanjem uvjeta pretraživanja u funkciji find(). Na primjer, pretpostavimo da samo želite dohvatiti zapis koji sadrži ime zaposlenika kao Guru99, tada se ova izjava može napisati na sljedeći način
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Ako se gornji kod uspješno izvrši, na vašoj konzoli će se prikazati sljedeći izlaz.
Izlaz:
Iz izlaza,
- Moći ćete jasno vidjeti da su svi dokumenti iz zbirke preuzeti. To je moguće korištenjem metode find() mongoDB veze (db) i ponavljanjem kroz sve dokumente pomoću kursora.
- Umetanje dokumenata u zbirku – Dokumenti se mogu umetnuti u zbirku pomoću metode insertOne koju pruža MongoDB knjižnica. Donji isječak koda pokazuje kako možemo umetnuti dokument u mongoDB kolekciju.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').insertOne({ Employeeid: 4, EmployeeName: "NewEmployee" }); });
Code Objašnjenje:
- Ovdje koristimo metodu insertOne iz MongoDB knjižnica za umetanje dokumenta u zbirku zaposlenika.
- Određujemo pojedinosti dokumenta o tome što treba umetnuti u zbirku zaposlenika.
Ako sada provjerite sadržaj svog MongoDB baze podataka, naći ćete zapis s Employeeid od 4 i EmployeeName od “NewEmployee” umetnut u kolekciju Employee.
Bilješka: Konzola neće prikazati nikakav izlaz jer se zapis umeće u bazu podataka i ovdje se ne može prikazati nikakav izlaz.
Kako biste provjerili jesu li podaci pravilno umetnuti u bazu podataka, morate izvršiti sljedeće naredbe MongoDB
- Koristite EmployeeDB
- db.Employee.find({Employeeid :4 })
Prva izjava osigurava da ste povezani s bazom podataka EmployeeDb. Druga izjava traži zapis koji ima ID zaposlenika 4.
- Ažuriranje dokumenata u zbirci – Dokumenti se mogu ažurirati u zbirci korištenjem metode updateOne koju nudi MongoDB knjižnica. Donji isječak koda pokazuje kako ažurirati dokument u mongoDB kolekciji.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').updateOne({ "EmployeeName": "NewEmployee" }, { $set: { "EmployeeName": "Mohan" } }); });
Code Objašnjenje:
- Ovdje koristimo metodu "updateOne" iz MongoDB biblioteka, koja se koristi za ažuriranje dokumenta u mongoDB kolekciji.
- Određujemo kriterije pretraživanja koji dokument treba ažurirati. U našem slučaju, želimo pronaći dokument koji ima EmployeeName "NewEmployee."
- Zatim želimo postaviti vrijednost EmployeeName dokumenta s "NewEmployee" na "Mohan".
Ako sada provjerite sadržaj svog MongoDB baze podataka, pronaći ćete ažurirani zapis s Employeeid of 4 i EmployeeName od “Mohan” u zbirci Employee.
Kako biste provjerili jesu li podaci ispravno ažurirani u bazi podataka, morate izvršiti sljedeće naredbe MongoDB
- Koristite EmployeeDB
- db.Employee.find({Employeeid :4 })
Prva izjava osigurava da ste povezani s bazom podataka EmployeeDb. Druga izjava traži zapis koji ima ID zaposlenika 4.
- Brisanje dokumenata u zbirci – Dokumenti se mogu brisati u kolekciji korištenjem metode "deleteOne" koju nudi MongoDB knjižnica. Donji isječak koda pokazuje kako izbrisati dokument u mongoDB kolekciji.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Code Objašnjenje:
- Ovdje koristimo metodu "deleteOne" iz MongoDB biblioteka, koja se koristi za brisanje dokumenta u mongoDB kolekciji.
- Određujemo kriterije pretraživanja koji dokument treba obrisati. U našem slučaju, želimo pronaći dokument koji ima EmployeeName "Mohan" i izbrisati taj dokument.
Ako sada provjerite sadržaj svog MongoDB baze podataka, pronaći ćete zapis s Employeeid of 4 i EmployeeName od “Mohan” izbrisanim iz zbirke Employee.
Kako biste provjerili jesu li podaci ispravno ažurirani u bazi podataka, morate izvršiti sljedeće naredbe MongoDB
- Koristite EmployeeDB
- db.Employee.find()
Prva izjava osigurava da ste povezani s bazom podataka EmployeeDb. Drugi iskaz pretražuje i prikazuje sve zapise u zbirci zaposlenika. Ovdje možete vidjeti je li zapis izbrisan ili ne.
Moderna asinkronost/čekanje MongoDB Veze u Node.js-u
The MongoClient.connect(url, povratni poziv) uzorak korišten u ovom članku odgovara MongoDB Verzija Node.js upravljačkog programa koja je bila trenutna kada su napisani gornji primjeri. Nedavna izdanja upravljačkog programa i dalje podržavaju taj stil povratnih poziva, ali većina novih projekata sada preferira obećanja i async/await, jer se rezultirajući kod čita od vrha prema dnu bez ugniježđenih povratnih poziva. Koraci u nastavku prepisuju istu vezu zaposlenika koristeći modernu sintaksu.
- Napravite jednu instancu MongoClienta izvan bilo koje funkcije, prosljeđujući niz za povezivanje jednom, na primjer const klijent = novi MongoKlient(url);
- poziv čekaj klijent.povezivanje() unutar asinkrone funkcije za otvaranje veze umjesto prosljeđivanja povratnog poziva.
- Preuzmite bazu podataka s klijent.db('BazaZaposlenika') umjesto oslanjanja na objekt vraćen unutar povratnog poziva.
- Pokreni upite s čekaju vas., Na primjer čekaj db.collection('Zaposlenik').find().toArray(), koji izravno vraća niz umjesto da zahtijeva povratni poziv kursora.
- Zatvorite vezu s čekaj klijent.zatvori() unutar finally bloka tako da se uvijek izvršava, čak i ako upit izbaci grešku.
const { MongoClient } = require('mongodb'); const url = 'mongodb://localhost:27017'; const client = new MongoClient(url); async function run() { try { await client.connect(); const db = client.db('EmployeeDB'); const employees = await db.collection('Employee').find().toArray(); console.log(employees); } finally { await client.close(); } } run().catch(console.error);
Oba stila se povezuju s istom EmployeeDB bazom podataka i istom kolekcijom Employee, tako da postojeći kod temeljen na povratnim pozivima ne treba odmah prepisivati. Dva pristupa mogu koegzistirati dok se projekt postupno migrira, a izbor uglavnom ovisi o tome koji će pristup biti... MongoDB Verzija Node.js upravljačkog programa, datoteka package.json, već je pričvršćena.
Kako izgraditi Node Express aplikaciju s MongoDB za pohranu i posluživanje sadržaja
S obzirom na to da su oba stila povezivanja obuhvaćena, sljedeći odjeljak primjenjuje klasični obrazac povratnog poziva unutar potpune Express aplikacije, budući da je to sintaksa koju koristi izvorni primjer poslužitelja u nastavku. Izrada aplikacije s kombinacijom Expressa i MongoDB prilično je uobičajena u današnje vrijeme.
Pri radu s JavaScript Kod web-baziranih aplikacija obično se čuje pojam MEAN stog.
- Pojam MEAN stog odnosi se na kolekciju JavaTehnologije temeljene na skriptama koje se koriste za razvoj web aplikacija.
- MEAN je akronim za MongoDB, ExpressJS, AngularJS, i Node.js.
Stoga je uvijek dobro razumjeti kako Node.js i MongoDB zajedno raditi na isporuci aplikacija koje su u interakciji s pozadinskim bazama podataka.
Pogledajmo jednostavan primjer kako možemo koristiti "express" i "MongoDB” zajedno. Naš će primjer koristiti istu zbirku zaposlenika u MongoDB EmployeeDB baza podataka.
Sada ćemo uključiti Express za prikaz podataka na našoj web stranici kada to korisnik zatraži. Kada se naša aplikacija pokreće na Node.js-u, možda će biti potrebno pregledati URL http://localhost:3000/Employeeid.
Kada se stranica pokrene, bit će prikazani svi ID-ovi zaposlenika u zbirci Zaposlenici. Dakle, pogledajmo isječak koda u odjeljcima koji će nam omogućiti da to postignemo.
Korak 1) Definirajte sve biblioteke koje treba koristiti u našoj aplikaciji, što je u našem slučaju i jedno i drugo MongoDB i ekspresna knjižnica.
Code Objašnjenje:
- Definiramo našu 'express' biblioteku, koja će se koristiti u našoj aplikaciji.
- Definiramo našeMongoDB' knjižnica, koja će se koristiti u našoj aplikaciji za povezivanje s našim MongoDB baza podataka.
- Ovdje definiramo URL naše baze podataka za povezivanje.
- Konačno, definiramo niz koji će se koristiti za pohranjivanje naše zbirke ID-ova zaposlenika koji se kasnije moraju prikazati u pregledniku.
Korak 2) U ovom koraku sada ćemo dobiti sve zapise u našoj zbirci 'Zaposlenici' i raditi s njima u skladu s tim.
Code Objašnjenje:
- Stvaramo put do naše aplikacije pod nazivom 'Employeeid.' Dakle, kad god netko pregledava http://localhost:3000/Employeeid naše aplikacije, izvršit će se isječak koda definiran za ovu rutu.
- Ovdje dobivamo sve zapise u našoj kolekciji 'Zaposlenik' putem naredbe db.collection('Zaposlenik').find(). Zatim ovu kolekciju dodjeljujemo varijabli koja se zove kursor. Pomoću ove varijable pokazivača moći ćemo pregledavati sve zapise zbirke.
- Sada koristimo funkciju cursor.each() za navigaciju kroz sve zapise naše zbirke. Za svaki zapis definirat ćemo isječak koda o tome što učiniti kada se pristupi svakom zapisu.
- Konačno, vidimo da ako vraćeni zapis nije null, tada preuzimamo zaposlenika putem naredbe “item.Employeeid”. Ostatak koda služi samo za izradu ispravnog HTML koda koji će omogućiti da naši rezultati budu pravilno prikazani u pregledniku.
Korak 3) U ovom koraku, poslat ćemo naš izlaz na web stranicu i natjerati našu aplikaciju da sluša na određenom portu.
Code Objašnjenje:
- Ovdje šaljemo cijeli sadržaj koji je konstruiran u prethodnom koraku na našu web stranicu. Parametar 'res' omogućuje nam slanje sadržaja na našu web stranicu kao odgovor.
- Čitava naša aplikacija Node.js sluša na portu 3000.
Izlaz:
Iz izlaza,
- Jasno pokazuje da su svi id-ovi zaposlenika u zbirci zaposlenika vraćeni. To je zato što koristimo MongoDB upravljački program za povezivanje s bazom podataka i dohvaćanje svih zapisa o zaposlenicima i naknadno korišten "express" za prikaz zapisa.
Ovdje je kôd za vašu referencu
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var cursor = db.collection('Employee').find(); //noinspection JSDeprecatedSymbols cursor.each(function(err, item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }); res.send(str); db.close(); }); }); var server = app.listen(3000, function() {});
Bilješka: cursor.each možda zastario na temelju vaše verzije MongoDB vozač. Možete dodati //noinspection JSDeprecatedSymbols ispred cursor.each da biste zaobišli problem. Alternativno, možete koristiti forEach. Ispod je primjer koda koji koristi forEach
var express = require('express'); var app = express(); var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; var str = ""; app.route('/Employeeid').get(function(req, res) { MongoClient.connect(url, function(err, db) { var collection = db.collection('Employee'); var cursor = collection.find({}); str = ""; cursor.forEach(function(item) { if (item != null) { str = str + " Employee id " + item.Employeeid + "</br>"; } }, function(err) { res.send(err); db.close(); } ); }); }); var server = app.listen(8080, function() {});











