node.js MongoDB Handledning med exempel
โก Smart sammanfattning
node.js MongoDB Integrationen gรถr det mรถjligt fรถr en Node-applikation att ansluta till en NoSQL-databas, kรถra CRUD-operationer och exponera live-poster via Express-rutter, med hjรคlp av den inbyggda mongodb-drivrutinen tillsammans med Mongoose fรถr schemabaserad datamodellering.

De flesta moderna webbapplikationer har nรฅgon form av datalagringssystem i backend-systemet. Om du till exempel tar fallet med en webbutik.ping applikation skulle data som priset pรฅ en vara lagras i databasen.
Node js-ramverket kan fungera med databaser med bรฅde relationella (som t.ex Oracle och MS SQL Server) och icke-relationella databaser (t.ex MongoDB). I den hรคr handledningen kommer vi att se hur vi kan anvรคnda databaser frรฅn Node js-applikationer.
Node.js och NoSQL-databaser
Under รฅrens lopp har NoSQL-databaser som MongoDB och relationsdatabaser som t.ex. MySQL har blivit ganska populรคra som databaser fรถr att lagra data. Databasernas fรถrmรฅga att lagra alla typer av data, och sรคrskilt i alla typer av format, รคr det som gรถr att de anvรคnds sรฅ ofta.
Node.js har fรถrmรฅgan att arbeta med bรฅda MySQL och MongoDB som databaser. Fรถr att anvรคnda nรฅgon av dessa databaser mรฅste du ladda ner och anvรคnda de nรถdvรคndiga modulerna med hjรคlp av Node-pakethanteraren.
Fรถr MySQL, den obligatoriska modulen heter "mysql". Fรถr MongoDB, kan utvecklare installera antingen den officiella inbyggda mongodb drivrutinen, vilket รคr paketet som anvรคnds i alla kodexempel i den hรคr artikeln, eller ett schemabaserat bibliotek som Mungo nรคr applikationen behรถver mer struktur.
Med dessa moduler kan du utfรถra fรถljande operationer i Node.js
- Hantera anslutningspoolningen โ Hรคr kan du ange antalet MySQL databasanslutningar som bรถr underhรฅllas och sparas av Node.js.
- Skapa och stรคng en anslutning till en databas. I bรฅda fallen kan du tillhandahรฅlla en รฅteruppringningsfunktion som kan anropas nรคrhelst anslutningsmetoderna "skapa" och "stรคng" exekveras.
- Frรฅgor kan utfรถras fรถr att hรคmta data frรฅn respektive databaser fรถr att hรคmta data.
- Datamanipulering, sรฅsom att infoga data, radera och uppdatera data kan ocksรฅ uppnรฅs med dessa moduler.
Fรถr resterande รคmnen ska vi titta pรฅ hur vi kan arbeta med MongoDB databaser inom node.js, med bรถrjan i en snabb jรคmfรถrelse av de tvรฅ vanligaste sรคtten att prata med MongoDB frรฅn ett Node.js-projekt.
MongoDB Native Driver vs Mongoose i Node.js
Modulnamnen som nรคmns ovan kan vara fรถrvirrande, eftersom Node.js erbjuder tvรฅ olika sรคtt att kommunicera med MongoDB: den infรถdda mongodb fรถraren och Mungo ODM (Object Data Modeling-bibliotek). Varje kodexempel senare i den hรคr artikeln anvรคnder den inbyggda drivrutinen, installerad med npm installera mongodb och nรฅs via MongoClientMongoose paketerar samma drivrutin och lรคgger till schemadefinitioner, validering och รฅteranvรคndbara modellmetoder, vilket passar stรถrre applikationer som behรถver en fรถrutsรคgbar datastruktur รถver mรฅnga samlingar. Att fรถrstรฅ skillnaden i fรถrvรคg undviker fรถrvirring vid installation av paket eller lรคsning av andra Node.js-program. MongoDB exempel online. Tabellen nedan jรคmfรถr bรฅda alternativen sรฅ att en utvecklare kan vรคlja rรคtt verktyg fรถr ett givet projekt.
| Aspect | Inbyggd mongodb-drivrutin | Mungo |
|---|---|---|
| Installation | npm installera mongodb | npm installera mongoose |
| Schema verkstรคllighet | Inga, dokumenten fรถrblir flexibla | Definieras genom ett Schema-objekt |
| Inlรคrningskurva | Lรคgre, nรคrmare rรฅ MongoDB sรถkfrรฅgor | Hรถgre, lรคgger till sitt eget API-lager |
| Bรคst fรถr | Smรฅ skript och prestandakรคnslig kod | Stรถrre appar med konsekventa datamodeller |
Dricks: Hรฅll dig till den inbyggda drivrutinen medan du lรคr dig kรคrnan MongoDB kommandon, gรฅ sedan vidare till Mungo nรคr applikationen behรถver schemavalidering รถver flera samlingar.
Anvรคnda MongoDB och Node.js
Med terminologin fรถrtydligad anvรคnder resten av den hรคr artikeln uteslutande den inbyggda drivrutinen, exakt som den visas i kodexemplen nedan. Som diskuterats i det tidigare รคmnet, MongoDB รคr en av de mest populรคra databaserna som anvรคnds tillsammans med Node.js.
Under det hรคr kapitlet ska vi se hur man etablerar kontakter med en MongoDB databas, och hur man utfรถr de normala operationerna fรถr att lรคsa data frรฅn en databas samt infoga, ta bort och uppdatera poster i en MongoDB databas.
Fรถr syftet med detta kapitel, lรฅt oss anta att vi har nedanstรฅende MongoDB data pรฅ plats.
Databasnamn: EmployeeDB
Samlingens namn: Anstรคlld
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Installation av NPM-moduler
Du behรถver en drivrutin fรถr att komma รฅt Mongo frรฅn en Node-applikation. Det finns ett antal Mongo-drivrutiner tillgรคngliga, men MongoDB รคr bland de mest populรคra. Fรถr att installera MongoDB modul, kรถr kommandot nedan
npm installera mongodb
- Skapa och stรคnga en anslutning till en MongoDB databas. Nedanstรฅende kodavsnitt visar hur du skapar och stรคnger en anslutning till en MongoDB databas.
Code Fรถrklaring:
- Det fรถrsta steget รคr att inkludera MongoDB drivrutinsmodulen, vilket gรถrs via require-funktionen. Nรคr den hรคr modulen รคr pรฅ plats kan vi anvรคnda de nรถdvรคndiga funktionerna som finns i den hรคr modulen fรถr att skapa kopplingar till databasen.
- Dรคrefter anger vi vรฅr anslutningsstrรคng till databasen. I anslutningsstrรคngen finns det 3 nyckelvรคrden som skickas.
- Den fรถrsta รคr 'mongodb' som anger att vi ansluter till en mongoDB-databas.
- Nรคsta รคr 'localhost' vilket betyder att vi ansluter till en databas pรฅ den lokala maskinen.
- Nรคsta รคr 'EmployeeDB' som รคr namnet pรฅ databasen som definieras i vรฅr MongoDB databas.
- Nรคsta steg รคr att faktiskt ansluta till vรฅr databas. Funktionen connect tar in vรฅra URL och har mรถjlighet att ange en callback-funktion. Den anropas nรคr anslutningen till databasen รถppnas. Detta ger oss mรถjlighet att veta om databasanslutningen lyckades eller inte.
- I funktionen skriver vi strรคngen "Anslutning upprรคttad" till konsolen fรถr att indikera att en framgรฅngsrik anslutning skapades.
- Slutligen stรคnger vi anslutningen med db.close-satsen.
Om ovanstรฅende kod exekveras korrekt, kommer strรคngen "Connected" att skrivas till konsolen som visas nedan.
- Sรถka efter data i en MongoDB databas - Anvรคnda MongoDB drivrutinen kan vi ocksรฅ hรคmta data frรฅn MongoDB databas. Avsnittet nedan visar hur vi kan anvรคnda drivrutinen fรถr att hรคmta alla dokument frรฅn vรฅr Employee-samling i vรฅr EmployeeDB-databas. Detta รคr samlingen i vรฅr MongoDB databas, som innehรฅller alla anstรคlldas relaterade dokument. Varje dokument har ett objekt-id, anstรคllds namn och anstรคlld-id fรถr att definiera vรคrdena fรถr 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 Fรถrklaring:
- I det fรถrsta steget skapar vi en markรถr (en markรถr รคr en pekare som anvรคnds fรถr att peka pรฅ de olika posterna som hรคmtats frรฅn en databas. Markรถren anvรคnds sedan fรถr att iterera genom de olika posterna i databasen. Hรคr definierar vi ett variabelnamn som heter markรถr, vilket kommer att anvรคndas fรถr att lagra pekaren till posterna som hรคmtats frรฅn databasen) som pekar pรฅ posterna som hรคmtas frรฅn MongoDb-samlingen. Vi har ocksรฅ mรถjlighet att ange samlingen 'Anstรคlld' som posterna ska hรคmtas frรฅn. Funktionen find() anvรคnds fรถr att ange att vi vill hรคmta alla dokument frรฅn MongoDB samling.
- Vi itererar nu genom vรฅr markรถr och fรถr varje dokument i markรถren ska vi kรถra en funktion.
- Vรฅr funktion รคr helt enkelt att skriva ut innehรฅllet i varje dokument till konsolen.
Notera: - Det รคr ocksรฅ mรถjligt att hรคmta en specifik post frรฅn en databas. Detta kan gรถras genom att ange sรถkvillkoret i find()-funktionen. Anta till exempel att du bara vill hรคmta posten som har den anstรคlldes namn som Guru99, sรฅ kan detta pรฅstรฅende skrivas enligt fรถljande
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Om ovanstรฅende kod exekveras framgรฅngsrikt, kommer fรถljande utdata att visas i din konsol.
Produktion:
Frรฅn utgรฅngen,
- Du kommer tydligt att kunna se att alla dokument frรฅn samlingen รคr hรคmtade. Detta รคr mรถjligt genom att anvรคnda metoden find() fรถr mongoDB-anslutningen (db) och iterera genom alla dokument med hjรคlp av markรถren.
- Infoga dokument i en samling โ Dokument kan infogas i en samling med metoden insertOne som tillhandahรฅlls av MongoDB bibliotek. Nedanstรฅende kodavsnitt visar hur vi kan infoga ett 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 Fรถrklaring:
- Hรคr anvรคnder vi metoden insertOne frรฅn MongoDB bibliotek fรถr att infoga ett dokument i anstรคllds samling.
- Vi specificerar dokumentdetaljerna fรถr vad som behรถver infogas i personalsamlingen.
Om du nu kontrollerar innehรฅllet i din MongoDB databas, hittar du posten med anstรคlld 4 och anstรคllds namn pรฅ "Ny anstรคlld" infogat i anstรคlld samling.
Obs: Konsolen kommer inte att visa nรฅgon utdata eftersom posten infogas i databasen och ingen utdata kan visas hรคr.
Fรถr att kontrollera att data har infogats korrekt i databasen mรฅste du utfรถra fรถljande kommandon i MongoDB
- Anvรคnd EmployeeDB
- db.Employee.find({Employeeid :4 })
Det fรถrsta uttalandet sรคkerstรคller att du รคr ansluten till EmployeeDb-databasen. Det andra pรฅstรฅendet sรถker efter posten som har anstรคlld-id 4.
- Uppdatera dokument i en samling โ Dokument kan uppdateras i en samling med updateOne-metoden som tillhandahรฅlls av MongoDB bibliotek. Nedanstรฅende kodavsnitt visar hur man uppdaterar ett 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 Fรถrklaring:
- Hรคr anvรคnder vi metoden "updateOne" frรฅn MongoDB bibliotek, som anvรคnds fรถr att uppdatera ett dokument i en mongoDB-samling.
- Vi specificerar sรถkkriterierna fรถr vilket dokument som behรถver uppdateras. I vรฅrt fall vill vi hitta dokumentet som har EmployeeName som "NewEmployee."
- Vi vill sedan stรคlla in vรคrdet pรฅ EmployeeName fรถr dokumentet frรฅn "NewEmployee" till "Mohan".
Om du nu kontrollerar innehรฅllet i din MongoDB databas, hittar du posten med anstรคlld pรฅ 4 och anstรคllds namn pรฅ "Mohan" uppdaterad i anstรคllningssamlingen.
Fรถr att kontrollera att data har uppdaterats korrekt i databasen mรฅste du utfรถra fรถljande kommandon i MongoDB
- Anvรคnd EmployeeDB
- db.Employee.find({Employeeid :4 })
Det fรถrsta uttalandet sรคkerstรคller att du รคr ansluten till EmployeeDb-databasen. Det andra pรฅstรฅendet sรถker efter posten som har anstรคlld-id 4.
- Ta bort dokument i en samling โ Dokument kan raderas i en samling med "deleteOne"-metoden som tillhandahรฅlls av MongoDB bibliotek. Nedanstรฅende kodavsnitt visar hur man tar bort ett 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 Fรถrklaring:
- Hรคr anvรคnder vi metoden "deleteOne" frรฅn MongoDB bibliotek, som anvรคnds fรถr att radera ett dokument i en mongoDB-samling.
- Vi specificerar sรถkkriterierna fรถr vilket dokument som ska raderas. I vรฅrt fall vill vi hitta dokumentet som har anstรคlldsnamnet "Mohan" och ta bort detta dokument.
Om du nu kontrollerar innehรฅllet i din MongoDB databas, hittar du posten med anstรคlld pรฅ 4 och anstรคllds namn pรฅ "Mohan" raderad frรฅn anstรคlld samling.
Fรถr att kontrollera att data har uppdaterats korrekt i databasen mรฅste du utfรถra fรถljande kommandon i MongoDB
- Anvรคnd EmployeeDB
- db.Employee.find()
Det fรถrsta uttalandet sรคkerstรคller att du รคr ansluten till EmployeeDb-databasen. Det andra uttalandet sรถker igenom och visar alla poster i anstรคllds samling. Hรคr kan du se om posten har raderats eller inte.
Modern Async/Avvakta MongoDB Anslutningar i Node.js
Ocuco-landskapet MongoClient.connect(url, รฅteruppringning) mรถnstret som anvรคnds i hela artikeln matchar MongoDB Node.js-drivrutinsversion som var aktuell nรคr exemplen ovan skrevs. Nyligen utgivna drivrutiner stรถder fortfarande den รฅteranropsstilen, men de flesta nya projekt fรถredrar nu promises och async/await, eftersom den resulterande koden lรคses uppifrรฅn och ner utan kapslade รฅteranrop. Stegen nedan skriver om samma Employee-anslutning med modern syntax.
- Skapa en enda MongoClient-instans utanfรถr valfri funktion, och skicka anslutningsstrรคngen en gรฅng, till exempel const klient = new MongoKlient(url);
- Ring upp vรคnta pรฅ klient.connect() inuti en async-funktion fรถr att รถppna anslutningen istรคllet fรถr att skicka en รฅteranrop.
- Hรคmta databasen med klient.db('Medarbetardatabasen') istรคllet fรถr att fรถrlita sig pรฅ objektet som returneras i en รฅteranrop.
- Kรถr frรฅgor med vรคnta, till exempel await db.collection('Anstรคlld').find().toArray(), vilket returnerar en array direkt istรคllet fรถr att krรคva ett markรถranrop.
- Stรคng anslutningen med vรคnta pรฅ klient.close() inuti ett finally-block sรฅ att det alltid kรถrs, รคven om en frรฅga ger ett fel.
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);
Bรฅda stilarna ansluter till samma EmployeeDB-databas och samma Employee-samling, sรฅ befintlig callback-baserad kod behรถver inte skrivas om omedelbart. De tvรฅ metoderna kan samexistera medan ett projekt migreras gradvis, och valet beror mestadels pรฅ vilken MongoDB Node.js-drivrutinsversionen av package.json-filen รคr redan fรคst.
Hur man bygger en node express-app med MongoDB att lagra och servera innehรฅll
Med bรฅda anslutningsstilarna tรคckta tillรคmpar nรคsta avsnitt det klassiska รฅteranropsmรถnstret i en komplett Express-applikation, eftersom det รคr den syntax som den ursprungliga exempelservern nedan anvรคnder. Bygga en applikation med en kombination av bรฅde Express och MongoDB รคr ganska vanligt nufรถrtiden.
Nรคr du arbetar med JavaScript webbaserade applikationer hรถr man normalt talas om termen MEAN-stack.
- Termen MEAN stack syftar pรฅ en samling av JavaSkriptbaserad teknik som anvรคnds fรถr att utveckla webbapplikationer.
- MEAN รคr en akronym fรถr MongoDB, ExpressJS, AngularJSoch Node.js.
Dรคrfรถr รคr det alltid bra att fรถrstรฅ hur Node.js och MongoDB arbeta tillsammans fรถr att leverera applikationer som interagerar med backend-databaser.
Lรฅt oss titta pรฅ ett enkelt exempel pรฅ hur vi kan anvรคnda "express" och "MongoDB" tillsammans. Vรฅrt exempel kommer att anvรคnda samma anstรคlld samling i MongoDB EmployeeDB-databas.
Vi kommer nu att integrera Express fรถr att visa data pรฅ vรฅr webbsida nรคr anvรคndaren begรคr det. Nรคr vรฅr applikation kรถrs pรฅ Node.js kan man behรถva blรคddra till URL http://localhost:3000/Employeeid.
Nรคr sidan รคr lanserad kommer alla anstรคllda id i anstรคllningssamlingen att visas. Sรฅ lรฅt oss se kodavsnittet i avsnitt som gรถr att vi kan uppnรฅ detta.
Steg 1) Definiera alla bibliotek som behรถver anvรคndas i vรฅr applikation, som i vรฅrt fall รคr bรฅde MongoDB och expressbibliotek.
Code Fรถrklaring:
- Vi hรฅller pรฅ att definiera vรฅrt "express"-bibliotek, som kommer att anvรคndas i vรฅr applikation.
- Vi definierar vรฅrMongoDB' bibliotek, som kommer att anvรคndas i vรฅr applikation fรถr att ansluta till vรฅr MongoDB databas.
- Hรคr definierar vi URL av vรฅr databas att ansluta till.
- Slutligen definierar vi en strรคng som kommer att anvรคndas fรถr att lagra vรฅr samling av medarbetar-id som mรฅste visas i webblรคsaren senare.
Steg 2) I det hรคr steget ska vi nu hรคmta alla poster i vรฅr "Anstรคlld"-samling och arbeta med dem dรคrefter.
Code Fรถrklaring:
- Vi skapar en vรคg till vรฅr applikation som heter "Anstรคlld". Sรฅ nรคrhelst nรฅgon surfar till http://localhost:3000/Employeeid av vรฅr applikation kommer kodavsnittet som definierats fรถr denna rutt att kรถras.
- Hรคr fรฅr vi alla poster i vรฅr 'Employee'-samling genom kommandot db.collection('Employee').find(). Vi tilldelar sedan denna samling till en variabel som kallas markรถr. Med denna markรถrvariabel kommer vi att kunna blรคddra igenom alla poster i samlingen.
- Vi anvรคnder nu funktionen cursor.each() fรถr att navigera genom alla poster i vรฅr samling. Fรถr varje post kommer vi att definiera ett kodavsnitt om vad som ska gรถras nรคr varje post nรฅs.
- Slutligen ser vi att om posten som returneras inte รคr null, sรฅ tar vi den anstรคllde via kommandot "artikel.Anstรคlld". Resten av koden รคr bara fรถr att konstruera en riktig HTML-kod som gรถr att vรฅra resultat kan visas korrekt i webblรคsaren.
Steg 3) I det hรคr steget kommer vi att skicka vรฅr utdata till webbsidan och fรฅ vรฅr applikation att lyssna pรฅ en viss port.
Code Fรถrklaring:
- Hรคr skickar vi hela innehรฅllet som skapades i det tidigare steget till vรฅr webbsida. Parametern 'res' tillรฅter oss att skicka innehรฅll till vรฅr webbsida som ett svar.
- Vi fรฅr hela vรฅr Node.js-applikation att lyssna pรฅ port 3000.
Produktion:
Frรฅn utgรฅngen,
- Det visar tydligt att alla anstรคlldas id i anstรคllningssamlingen hรคmtades. Detta beror pรฅ att vi anvรคnder MongoDB drivrutinen fรถr att ansluta till databasen och hรคmta alla anstรคlldas poster och anvรคnde sedan "express" fรถr att visa posterna.
Hรคr รคr koden som referens
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() {});
Obs: cursor.each kanske utfasas baserat pรฅ version av din MongoDB fรถrare. Du kan lรคgga till //noinspection JSDeprecatedSymbols fรถre cursor.each fรถr att kringgรฅ problemet. Alternativt kan du anvรคnda forEach. Nedan รคr exempelkoden som anvรคnder 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() {});











