node.js MongoDB Tutorial med eksempler
De fleste moderne webapplikationer har en eller anden form for datalagringssystem i backend-systemet. Hvis man for eksempel tager en webshop som eksempel.ping applikationen, ville data sรฅsom prisen pรฅ en vare blive gemt i databasen.
Node js-rammen kan arbejde med databaser med bรฅde relationelle (f.eks Oracle og MS SQL Server) og ikke-relationelle databaser (som f.eks MongoDB). I denne tutorial vil vi se, hvordan vi kan bruge databaser fra Node js-applikationer.
Node.js og NoSQL-databaser
Gennem รฅrene har NoSQL-database som f.eks MongoDB og For MySQL er blevet ret populรฆre som databaser til lagring af data. Disse databasers evne til at gemme enhver form for indhold og isรฆr i enhver form for format er det, der gรธr disse databaser sรฅ berรธmte.
Node.js har mulighed for at arbejde med begge dele MySQL og MongoDB som databaser. For at bruge en af โโdisse databaser skal du downloade og bruge de nรธdvendige moduler ved hjรฆlp af Node-pakkehรฅndteringen.
Til MySQL, kaldes det pรฅkrรฆvede modul "mysql" og til brug MongoDB det nรธdvendige modul, der skal installeres, er "Mongoose".
Med disse moduler kan du udfรธre fรธlgende handlinger i Node.js
- Administrer forbindelsespooling โ Her kan du angive antallet af MySQL databaseforbindelser, der skal vedligeholdes og gemmes af Node.js.
- Opret og luk en forbindelse til en database. I begge tilfรฆlde kan du give en tilbagekaldsfunktion, som kan kaldes, nรฅr "opret" og "luk" forbindelsesmetoderne udfรธres.
- Forespรธrgsler kan udfรธres for at hente data fra respektive databaser for at hente data.
- Datamanipulation, sรฅsom indsรฆttelse af data, sletning og opdatering af data kan ogsรฅ opnรฅs med disse moduler.
For de resterende emner vil vi se pรฅ, hvordan vi kan arbejde med MongoDB databaser indenfor node.js.
Ved brug af MongoDB og Node.js
Som diskuteret i det tidligere emne, MongoDB er en af โโde mest populรฆre databaser, der bruges sammen med Node.js.
I lรธbet af dette kapitel vil vi se
Hvordan vi kan etablere forbindelser med en MongoDB database
Hvordan vi kan udfรธre de normale operationer med at lรฆse data fra en database samt indsรฆtte, slette og opdatere poster i en MongoDB databasen.
Med henblik pรฅ dette kapitel, lad os antage, at vi har nedenstรฅende MongoDB data pรฅ plads.
Databasenavn: EmployeeDB
Samlingens navn: Medarbejder
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Installation af NPM-modulerne
Du skal bruge en driver for at fรฅ adgang til Mongo fra en Node-applikation. Der er en rรฆkke Mongo-drivere til rรฅdighed, men MongoDB er blandt de mest populรฆre. For at installere MongoDB modul, skal du kรธre kommandoen nedenfor
npm installer mongodb
- Oprettelse og lukning af en forbindelse til en MongoDB databasen. Nedenstรฅende kodestykke viser, hvordan du opretter og lukker en forbindelse til en MongoDB databasen.
Code Forklaring:
- Det fรธrste trin er at inkludere mongoose-modulet, hvilket gรธres gennem krรฆve-funktionen. Nรฅr dette modul er pรฅ plads, kan vi bruge de nรธdvendige funktioner til rรฅdighed i dette modul til at skabe forbindelser til databasen.
- Dernรฆst specificerer vi vores forbindelsesstreng til databasen. I forbindelsesstrengen er der 3 nรธglevรฆrdier, som er bestรฅet.
- Den fรธrste er 'mongodb', som angiver, at vi opretter forbindelse til en mongoDB-database.
- Den nรฆste er 'localhost', hvilket betyder, at vi opretter forbindelse til en database pรฅ den lokale maskine.
- Den nรฆste er 'EmployeeDB' som er navnet pรฅ databasen defineret i vores MongoDB databasen.
- Det nรฆste trin er rent faktisk at oprette forbindelse til vores database. Connect-funktionen tager vores URL og har muligheden for at angive en callback-funktion. Den vil blive kaldt, nรฅr forbindelsen til databasen รฅbnes. Dette giver os mulighed for at vide, om databaseforbindelsen var vellykket eller ej.
- I funktionen skriver vi strengen "Forbindelse etableret" til konsollen for at indikere, at en vellykket forbindelse blev oprettet.
- Til sidst lukker vi forbindelsen ved hjรฆlp af db.close-erklรฆringen.
Hvis ovenstรฅende kode udfรธres korrekt, vil strengen "Connected" blive skrevet til konsollen som vist nedenfor.
- Forespรธrgsel efter data i en MongoDB database - Bruger MongoDB driver kan vi ogsรฅ hente data fra MongoDB database. Nedenstรฅende afsnit viser, hvordan vi kan bruge driveren til at hente alle dokumenter fra vores medarbejdersamling i vores EmployeeDB-database. Dette er kollektionen i vores MongoDB database, som indeholder alle medarbejderrelaterede dokumenter. Hvert dokument har et objekt-id, medarbejdernavn og medarbejder-id til at definere vรฆrdierne for dokumentet.
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 Forklaring:
- I det fรธrste trin opretter vi en markรธr (En markรธr er en markรธr, som bruges til at pege pรฅ de forskellige poster hentet fra en database. Markรธren bruges derefter til at iterere gennem de forskellige poster i databasen. Her definerer vi en variabelnavn kaldet cursor, som vil blive brugt til at gemme markรธren til de poster, der er hentet fra databasen ), som peger pรฅ de poster, der hentes fra MongoDb-samlingen. Vi har ogsรฅ mulighed for at specificere samlingen 'Medarbejder', hvorfra vi kan hente posterne. Find()-funktionen bruges til at angive, at vi รธnsker at hente alle dokumenterne fra MongoDB samling.
- Vi itererer nu gennem vores markรธr, og for hvert dokument i markรธren skal vi udfรธre en funktion.
- Vores funktion er simpelthen at udskrive indholdet af hvert dokument til konsollen.
Bemรฆrk: - Det er ogsรฅ muligt at hente en bestemt post fra en database. Dette kan gรธres ved at angive sรธgebetingelsen i find()-funktionen. For eksempel, antag, at du kun vil hente den post, der har medarbejderens navn som Guru99, sรฅ kan denne sรฆtning skrives som fรธlger
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Hvis ovenstรฅende kode udfรธres korrekt, vil fรธlgende output blive vist i din konsol.
Output:
Fra udgangen,
- Du vil tydeligt kunne se, at alle dokumenter fra samlingen er hentet. Dette er muligt ved at bruge find()-metoden for mongoDB-forbindelsen (db) og gentage alle dokumenterne ved hjรฆlp af markรธren.
- Indsรฆttelse af dokumenter i en samling โ Dokumenter kan indsรฆttes i en samling ved hjรฆlp af insertOne-metoden leveret af MongoDB bibliotek. Nedenstรฅende kodestykke viser, hvordan vi kan indsรฆtte et dokument i en mongoDB-samling.
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 Forklaring:
- Her bruger vi insertOne-metoden fra MongoDB bibliotek for at indsรฆtte et dokument i medarbejdersamlingen.
- Vi specificerer dokumentdetaljerne for, hvad der skal indsรฆttes i medarbejdersamlingen.
Hvis du nu tjekker indholdet af din MongoDB database, vil du finde posten med Medarbejder-id pรฅ 4 og Medarbejdernavn pรฅ "Ny Medarbejder" indsat i Medarbejdersamlingen.
Bemรฆrk: Konsollen vil ikke vise noget output, fordi posten er ved at blive indsat i databasen, og ingen output kan vises her.
For at kontrollere, at dataene er blevet korrekt indsat i databasen, skal du udfรธre fรธlgende kommandoer i MongoDB
- Brug EmployeeDB
- db.Employee.find({Employeeid :4 })
Den fรธrste erklรฆring sikrer, at du er forbundet til EmployeeDb-databasen. Den anden erklรฆring sรธger efter posten, som har medarbejder-id'et 4.
- Opdatering af dokumenter i en samling โ Dokumenter kan opdateres i en samling ved hjรฆlp af updateOne-metoden leveret af MongoDB bibliotek. Nedenstรฅende kodestykke viser, hvordan man opdaterer et dokument i en mongoDB-samling.
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 Forklaring:
- Her bruger vi "updateOne" metoden fra MongoDB bibliotek, som bruges til at opdatere et dokument i en mongoDB-samling.
- Vi specificerer sรธgekriterierne for hvilket dokument, der skal opdateres. I vores tilfรฆlde รธnsker vi at finde dokumentet, der har medarbejdernavnet "NewEmployee."
- Vi รธnsker derefter at indstille vรฆrdien af โโEmployeeName for dokumentet fra "NewEmployee" til "Mohan".
Hvis du nu tjekker indholdet af din MongoDB database, vil du finde posten med medarbejder-id pรฅ 4 og medarbejdernavn pรฅ "Mohan" opdateret i medarbejdersamlingen.
For at kontrollere, at dataene er blevet korrekt opdateret i databasen, skal du udfรธre fรธlgende kommandoer i MongoDB
- Brug EmployeeDB
- db.Employee.find({Employeeid :4 })
Den fรธrste erklรฆring sikrer, at du er forbundet til EmployeeDb-databasen. Den anden erklรฆring sรธger efter posten, som har medarbejder-id'et 4.
- Sletning af dokumenter i en samling โ Dokumenter kan slettes i en samling ved hjรฆlp af "deleteOne"-metoden leveret af MongoDB bibliotek. Nedenstรฅende kodestykke viser, hvordan man sletter et dokument i en mongoDB-samling.
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').deleteOne(
{
"EmployeeName": "Mohan"
}
);
});
Code Forklaring:
- Her bruger vi "deleteOne"-metoden fra MongoDB bibliotek, som bruges til at slette et dokument i en mongoDB-samling.
- Vi specificerer sรธgekriterierne for hvilket dokument, der skal slettes. I vores tilfรฆlde รธnsker vi at finde dokumentet, der har medarbejdernavnet "Mohan" og slette dette dokument.
Hvis du nu tjekker indholdet af din MongoDB database, vil du finde posten med Medarbejder-id pรฅ 4 og Medarbejdernavn pรฅ "Mohan" slettet fra Medarbejdersamlingen.
For at kontrollere, at dataene er blevet korrekt opdateret i databasen, skal du udfรธre fรธlgende kommandoer i MongoDB
- Brug EmployeeDB
- db.Employee.find()
Den fรธrste erklรฆring sikrer, at du er forbundet til EmployeeDb-databasen. Den anden erklรฆring sรธger og viser alle poster i medarbejdersamlingen. Her kan du se, om posten er blevet slettet eller ej.
Sรฅdan bygger du en node express-app med MongoDB at gemme og servere indhold
Opbygning af en applikation med en kombination af bรฅde at bruge ekspres og MongoDB er ret almindeligt i dag.
Nรฅr du arbejder med JavaScript webbaserede applikationer, vil man normalt her af betegnelsen MEAN stack.
- Udtrykket MEAN stack refererer til en samling af JavaScriptbaserede teknologier, der bruges til at udvikle webapplikationer.
- MEAN er et akronym for MongoDB, ExpressJS, AngularJS, og Node.js.
Derfor er det altid godt at forstรฅ, hvordan Node.js og MongoDB arbejde sammen om at levere applikationer, der interagerer med backend-databaser.
Lad os se pรฅ et simpelt eksempel pรฅ, hvordan vi kan bruge "express" og "MongoDB" sammen. Vores eksempel vil gรธre brug af den samme medarbejdersamling i MongoDB MedarbejderDB database.
Vi vil nu integrere Express for at vise dataene pรฅ vores webside, nรฅr brugeren anmoder om det. Nรฅr vores applikation kรธrer pรฅ Node.js, skal man muligvis navigere til URL http://localhost:3000/Employeeid.
Nรฅr siden er lanceret, vil alle medarbejder-id'erne i Medarbejdersamlingen blive vist. Sรฅ lad os se kodestykket i sektioner, som giver os mulighed for at opnรฅ dette.
Trin 1) Definer alle de biblioteker, der skal bruges i vores applikation, som i vores tilfรฆlde er bรฅde MongoDB og ekspresbibliotek.
Code Forklaring:
- Vi er ved at definere vores 'express'-bibliotek, som vil blive brugt i vores applikation.
- Vi definerer vores 'MongoDB' bibliotek, som vil blive brugt i vores applikation til at oprette forbindelse til vores MongoDB databasen.
- Her definerer vi URL af vores database at oprette forbindelse til.
- Endelig er vi ved at definere en streng, som skal bruges til at gemme vores samling af medarbejder-id, som skal vises i browseren senere.
Trin 2) I dette trin vil vi nu hente alle posterne i vores 'Medarbejder'-samling og arbejde med dem i overensstemmelse hermed.
Code Forklaring:
- Vi er ved at oprette en rute til vores applikation kaldet 'Medarbejderid'. Sรฅ hver gang nogen browser til http://localhost:3000/Employeeid af vores applikation vil kodestykket, der er defineret for denne rute, blive udfรธrt.
- Her fรฅr vi alle posterne i vores 'Employee'-samling gennem kommandoen db.collection('Employee').find(). Vi tildeler derefter denne samling til en variabel kaldet cursor. Ved at bruge denne markรธrvariabel vil vi vรฆre i stand til at gennemse alle samlingens poster.
- Vi bruger nu funktionen cursor.each() til at navigere gennem alle posterne i vores samling. For hver post skal vi definere et kodestykke om, hvad der skal gรธres, nรฅr hver post er tilgรฅet.
- Endelig ser vi, at hvis den returnerede post ikke er nul, sรฅ tager vi medarbejderen via kommandoen "vare.Medarbejder". Resten af โโkoden er blot for at konstruere en ordentlig HTML-kode, som gรธr det muligt for vores resultater at blive vist korrekt i browseren.
Trin 3) I dette trin vil vi sende vores output til websiden og fรฅ vores applikation til at lytte pรฅ en bestemt port.
Code Forklaring:
- Her sender vi hele indholdet, som blev konstrueret i det tidligere trin, til vores webside. Parameteren 'res' giver os mulighed for at sende indhold til vores webside som et svar.
- Vi fรฅr hele vores Node.js-applikation til at lytte pรฅ port 3000.
Output:
Fra udgangen,
- Det viser tydeligt, at alle medarbejder-id'erne i medarbejdersamlingen blev hentet. Dette er fordi vi bruger MongoDB driver til at oprette forbindelse til databasen og hente alle medarbejderposter og efterfรธlgende brugte "express" til at vise posterne.
Her er koden til din reference
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() {});
Bemรฆrk: cursor.hver mรฅske forรฆldet baseret pรฅ version af din MongoDB chauffรธr. Du kan tilfรธje //noinspection JSDeprecatedSymbols fรธr cursor.each for at omgรฅ problemet. Alternativt kan du bruge forEach. Nedenfor er prรธvekoden ved hjรฆlp af 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() {});
Resumรฉ
- Node.js bruges i forbindelse med NoSQL databaser til at bygge en masse moderne webapplikationer. Nogle af de almindeligt anvendte databaser er MySQL og MongoDB.
- Et af de almindelige moduler, der bruges til at arbejde med MongoDB databaser er et modul kaldet 'MongoDB.' Dette modul installeres via Node-pakkehรฅndteringen.
- Med MongoDB modul, er det muligt at forespรธrge efter poster i en samling og udfรธre de normale opdaterings-, sletnings- og indsรฆttelsesoperationer.
- Endelig er en af โโde moderne praksisser at bruge den udtrykkelige ramme sammen med MongoDB at levere moderne applikationer. Express-rammen kan gรธre brug af de data, der returneres af MongoDB driver og vise dataene til brugeren pรฅ websiden i overensstemmelse hermed.











