node.js MongoDB Handledning med exempel
Mestadels alla moderna webbapplikationer har något slags datalagringssystem i backend. Om du till exempel tar fallet med en webbshoppingapplikation, kommer data som priset på en vara att 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
Genom åren har NoSQL-databas som t.ex MongoDB och för MySQL har blivit ganska populära som databaser för att lagra data. Förmågan hos dessa databaser att lagra alla typer av innehåll och särskilt i alla typer av format är det som gör dessa databaser så kända.
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 nödvändiga modulen kallas "mysql" och för användning MongoDB den nödvändiga modulen som ska installeras är "Mongoose".
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.
Använda MongoDB och Node.js
Som diskuterats i det tidigare ämnet, MongoDB är en av de mest populära databaserna som används tillsammans med Node.js.
Under detta kapitel kommer vi att se
Hur vi kan upprätta förbindelser med en MongoDB databas
Hur vi kan utföra normala operationer med 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.
Kodförklaring:
- Det första steget är att inkludera mongoose-modulen, vilket görs genom funktionen require. När den här modulen är på plats kan vi använda de nödvändiga funktionerna som finns tillgängliga i denna modul 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. Connect-funktionen tar in vår URL och har möjlighet att specificera en callback-funktion. Den kommer att anropas när anslutningen öppnas till databasen. 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 personalsamling i vår EmployeeDB-databas. Detta är kollektionen 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); }); });
Kodfö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ämtas från en databas. Markören används sedan för att iterera genom de olika posterna i databasen. Här definierar vi en variabelnamn som kallas cursor som kommer att användas för att lagra pekaren till de poster som hämtas från databasen ) som pekar på de poster som hämtas från MongoDb-samlingen. Vi har också möjlighet att specificera samlingen "Anställd" som vi kan hämta journalerna från. Find()-funktionen 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 viss post från en databas. Detta kan göras genom att ange sökvillkoret i find()-funktionen. Anta till exempel att om du bara ville hämta posten som har anställds namn som Guru99, så kan detta uttalande skrivas på följande sätt
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" }); });
Kodfö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.
Notera: 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" } }); });
Kodfö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" } ); });
Kodfö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.
Hur man bygger en node express-app med MongoDB att lagra och servera innehåll
Att bygga en applikation med en kombination av både att använda express och MongoDB är ganska vanligt nuförtiden.
När du arbetar med JavaScript webbaserade applikationer kommer man normalt här av 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, AngularJS, och 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 införliva Express för att visa data på vår webbsida när det efterfrågas av användaren. När vår applikation körs på Node.js kan man behöva bläddra till URL:en 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.
Kodfö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 webbadressen till 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.
Kodfö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.
Kodfö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() {});
Notera: 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() {});
Sammanfattning
- Node.js används tillsammans med NoSQL databaser för att bygga många moderna webbapplikationer. Några av de vanliga databaserna som används är MySQL och MongoDB.
- En av de vanliga modulerna som används för att arbeta med MongoDB databaser är en modul som heter 'MongoDB.' Denna modul installeras via Node-pakethanteraren.
- Med MongoDB modul, är det möjligt att fråga efter poster i en samling och utföra de normala uppdaterings-, raderings- och infogningsoperationerna.
- Slutligen är en av de moderna metoderna att använda det uttryckliga ramverket tillsammans med MongoDB att leverera moderna applikationer. Express-ramverket kan använda de data som returneras av MongoDB drivrutinen och visa data för användaren på webbsidan i enlighet med detta.