Node.js MongoDB Tutorial con esempi
⚡ Riepilogo intelligente
Node.js MongoDB L'integrazione consente a un'applicazione Node di connettersi a un database NoSQL, eseguire operazioni CRUD ed esporre record in tempo reale tramite route Express, utilizzando il driver nativo di MongoDB insieme a Mongoose per la modellazione dei dati basata su schema.
Quasi tutte le applicazioni web moderne hanno una sorta di sistema di archiviazione dati nel backend. Ad esempio, se prendiamo il caso di un negozio onlineping Nell'applicazione, dati come il prezzo di un articolo verrebbero memorizzati nel database.
Il framework Node js può funzionare con database sia relazionali (come Oracle e MS SQL Server) e database non relazionali (come MongoDB). In questo tutorial vedremo come utilizzare i database dalle applicazioni Node js.
Database Node.js e NoSQL
Nel corso degli anni, i database NoSQL come MongoDB e database relazionali come MySQL I database sono diventati molto popolari per l'archiviazione dei dati. La capacità di questi database di memorizzare qualsiasi tipo di dato, e in particolare in qualsiasi formato, è ciò che ne determina l'ampia diffusione.
Node.js ha la capacità di lavorare con entrambi MySQL and MongoDB come database. Per utilizzare uno di questi database, è necessario scaricare e utilizzare i moduli richiesti utilizzando il gestore pacchetti Node.
Per MySQL, il modulo richiesto si chiama “mysql”. Per MongoDB, gli sviluppatori possono installare sia il nativo ufficiale MongoDB driver, che è il pacchetto utilizzato in tutti gli esempi di codice in questo articolo, o una libreria basata su schema come Mangusta quando l'applicazione necessita di una struttura più definita.
Con questi moduli puoi eseguire le seguenti operazioni in Node.js
- Gestisci il pool di connessioni: qui puoi specificare il numero di MySQL connessioni al database che dovrebbero essere mantenute e salvate da Node.js.
- Creare e chiudere una connessione a un database. In entrambi i casi, è possibile fornire una funzione di callback che può essere richiamata ogni volta che vengono eseguiti i metodi di connessione "crea" e "chiudi".
- È possibile eseguire query per ottenere dati dai rispettivi database per recuperare i dati.
- Con questi moduli è possibile anche manipolare i dati, come l'inserimento, l'eliminazione e l'aggiornamento dei dati.
Per gli argomenti rimanenti, vedremo come possiamo lavorare MongoDB database all'interno Node.js, iniziando con un rapido confronto dei due modi più comuni di parlare con MongoDB da un progetto Node.js.
MongoDB Native Driver contro Mongoose in Node.js
I nomi dei moduli menzionati sopra possono essere fonte di confusione, perché Node.js offre due modi diversi per comunicare con MongoDB: il nativo MongoDB conducente e il Mangusta ODM (libreria di modellazione dati a oggetti). Ogni esempio di codice successivo in questo articolo utilizza il driver nativo, installato con npm installa mongodb e accessibile tramite MongoClientMongoose incapsula lo stesso driver e aggiunge definizioni di schema, convalida e metodi di modello riutilizzabili, adatti ad applicazioni più grandi che necessitano di una struttura dati prevedibile su molte collezioni. Comprendere la differenza in anticipo evita confusione durante l'installazione dei pacchetti o la lettura di altro codice Node.js. MongoDB Esempi online. La tabella seguente confronta entrambe le opzioni in modo che uno sviluppatore possa scegliere lo strumento più adatto a un determinato progetto.
| Aspetto | Driver nativo per MongoDB | Mangusta |
|---|---|---|
| Installazione | npm installa mongodb | npm install mongoose |
| Applicazione dello schema | Nessuno, i documenti restano flessibili | Definito tramite un oggetto Schema |
| Curva di apprendimento | Più basso, più vicino al crudo MongoDB query | Più alto, aggiunge il proprio livello API |
| migliori per | Script di piccole dimensioni e codice sensibile alle prestazioni | Applicazioni più grandi con modelli di dati coerenti |
Suggerimento: Attieniti al driver nativo durante l'apprendimento delle basi MongoDB comandi, quindi spostati su Mangusta quando l'applicazione necessita di convalida dello schema su più raccolte.
utilizzando MongoDB e Node.js
Chiarito il termine, il resto di questo articolo utilizza esclusivamente il driver nativo, esattamente come appare negli esempi di codice seguenti. Come discusso nell'argomento precedente, MongoDB è uno dei database più popolari utilizzati insieme a Node.js.
Durante questo capitolo vedremo come stabilire connessioni con un MongoDB database e come eseguire le normali operazioni di lettura dei dati da un database, nonché di inserimento, eliminazione e aggiornamento dei record in un MongoDB Banca dati.
Ai fini di questo capitolo, supponiamo di avere quanto segue MongoDB dati in atto.
Nome del database: EmployeeDB
Nome della raccolta: Dipendente
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Installazione dei moduli NPM
Hai bisogno di un driver per accedere a Mongo dall'interno di un'applicazione Node. Sono disponibili numerosi driver Mongo, ma MongoDB è tra i più apprezzati. Per installare il MongoDB modulo, esegui il comando seguente
npm installa mongodb
- Creazione e chiusura di una connessione a a MongoDB Banca dati. Il frammento di codice seguente mostra come creare e chiudere una connessione a a MongoDB Banca dati.
Code Spiegazione:
- Il primo passo è includere il MongoDB modulo driver, che viene implementato tramite la funzione require. Una volta che questo modulo è presente, possiamo utilizzare le funzioni necessarie disponibili al suo interno per creare connessioni al database.
- Successivamente, specifichiamo la nostra stringa di connessione al database. Nella stringa di connessione vengono passati 3 valori chiave.
- Il primo è "mongodb" che specifica che ci stiamo connettendo a un database mongoDB.
- Il successivo è "localhost", il che significa che ci stiamo connettendo a un database sul computer locale.
- Il successivo è 'EmployeeDB' che è il nome del database definito nel ns MongoDB Banca dati.
- Il passo successivo è quello di connetterci effettivamente al nostro database. La funzione connect prende il nostro URL e offre la possibilità di specificare una funzione di callback. Questa verrà richiamata all'apertura della connessione al database. Ciò ci consente di sapere se la connessione al database è andata a buon fine o meno.
- Nella funzione scriviamo la stringa "Connessione stabilita" sulla console per indicare che è stata creata una connessione riuscita.
- Infine, chiudiamo la connessione utilizzando l'istruzione db.close.
Se il codice precedente viene eseguito correttamente, la stringa "Connesso" verrà scritta sulla console come mostrato di seguito.
- Richiesta di dati in a MongoDB banca dati - Usando il MongoDB driver possiamo anche recuperare i dati dal file MongoDB database. La sezione seguente mostrerà come possiamo utilizzare il driver per recuperare tutti i documenti dalla nostra collezione Employee nel nostro database EmployeeDB. Questa è la collezione nel nostro MongoDB database, che contiene tutti i documenti relativi ai dipendenti. Ogni documento ha un ID oggetto, un nome dipendente e un ID dipendente per definire i valori del documento.
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 Spiegazione:
- Nel primo passaggio, creiamo un cursore (un cursore è un puntatore che viene utilizzato per puntare ai vari record recuperati da un database. Il cursore viene quindi utilizzato per iterare attraverso i diversi record nel database. Qui definiamo un nome di variabile chiamato cursor che verrà utilizzato per memorizzare il puntatore ai record recuperati dal database) che punta ai record che vengono recuperati dalla collezione MongoDB. Abbiamo anche la possibilità di specificare la collezione 'Employee' da cui recuperare i record. La funzione find() viene utilizzata per specificare che vogliamo recuperare tutti i documenti dalla MongoDB Collection
- Ora stiamo scorrendo il nostro cursore e per ogni documento nel cursore eseguiremo una funzione.
- La nostra funzione stamperà semplicemente il contenuto di ciascun documento sulla console.
Nota: - È anche possibile recuperare un record specifico da un database. Questo può essere fatto specificando la condizione di ricerca nella funzione find(). Ad esempio, supponiamo di voler recuperare solo il record che ha il nome del dipendente come Guru99, quindi questa affermazione può essere scritta come segue
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Se il codice sopra riportato viene eseguito correttamente, nella console verrà visualizzato il seguente output.
Produzione:
Dall'uscita,
- Potrai vedere chiaramente che tutti i documenti della raccolta sono stati recuperati. Ciò è possibile utilizzando il metodo find() della connessione mongoDB (db) e scorrendo tutti i documenti utilizzando il cursore.
- Inserimento di documenti in una raccolta – I documenti possono essere inseriti in una raccolta utilizzando il metodo insertOne fornito da MongoDB library. Il frammento di codice sottostante mostra come possiamo inserire un documento in una raccolta mongoDB.
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 Spiegazione:
- Qui stiamo utilizzando il metodo insertOne da MongoDB libreria per inserire un documento nella raccolta Employee.
- Stiamo specificando i dettagli del documento che devono essere inseriti nella raccolta Employee.
Se ora controlli il contenuto del tuo MongoDB database, troverai il record con Employeeid pari a 4 e EmployeeName pari a "NewEmployee" inserito nella raccolta Employee.
Nota: La console non mostrerà alcun output perché il record viene inserito nel database e nessun output può essere mostrato qui.
Per verificare che i dati siano stati inseriti correttamente nel database, è necessario eseguire i seguenti comandi in MongoDB
- Utilizza EmployeeDB
- db.Dipendente.find({Dipendenteeid :4 })
La prima istruzione garantisce che tu sia connesso al database EmployeeDb. La seconda istruzione cerca il record con l'ID dipendente 4.
- Aggiornamento dei documenti in una raccolta – I documenti possono essere aggiornati in una raccolta utilizzando il metodo updateOne fornito da MongoDB library. Il frammento di codice seguente mostra come aggiornare un documento in una raccolta mongoDB.
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 Spiegazione:
- Qui stiamo utilizzando il metodo "updateOne" da MongoDB libreria, utilizzata per aggiornare un documento in una raccolta mongoDB.
- Stiamo specificando i criteri di ricerca di quale documento deve essere aggiornato. Nel nostro caso, vogliamo trovare il documento che ha il EmployeeName di "NewEmployee".
- Vogliamo quindi impostare il valore di EmployeeName del documento da "NewEmployee" a "Mohan".
Se ora controlli il contenuto del tuo MongoDB database, troverai il record con Employeeid di 4 e EmployeeName di "Mohan" aggiornato nella raccolta Employee.
Per verificare che i dati siano stati aggiornati correttamente nel database, è necessario eseguire i seguenti comandi in MongoDB
- Utilizza EmployeeDB
- db.Dipendente.find({Dipendenteeid :4 })
La prima istruzione garantisce che tu sia connesso al database EmployeeDb. La seconda istruzione cerca il record con l'ID dipendente 4.
- Eliminazione di documenti in una raccolta – I documenti possono essere eliminati in una raccolta utilizzando il metodo "deleteOne" fornito da MongoDB library. Il frammento di codice seguente mostra come eliminare un documento in una raccolta mongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Code Spiegazione:
- Qui stiamo utilizzando il metodo "deleteOne" da MongoDB libreria, utilizzata per eliminare un documento in una raccolta mongoDB.
- Stiamo specificando i criteri di ricerca di quale documento deve essere eliminato. Nel nostro caso, vogliamo trovare il documento che ha il EmployeeName di "Mohan" ed eliminare questo documento.
Se ora controlli il contenuto del tuo MongoDB database, troverai il record con Employeeid pari a 4 e EmployeeName pari a "Mohan" eliminato dalla raccolta Employee.
Per verificare che i dati siano stati aggiornati correttamente nel database, è necessario eseguire i seguenti comandi in MongoDB
- Utilizza EmployeeDB
- db.Dipendente.trova()
La prima istruzione garantisce che tu sia connesso al database EmployeeDb. La seconda istruzione cerca e visualizza tutti i record nella raccolta dei dipendenti. Qui puoi vedere se il record è stato eliminato o meno.
Async/Await moderno MongoDB Connessioni in Node.js
Migliori MongoClient.connect(url, callback) il modello utilizzato in tutto questo articolo corrisponde al MongoDB La versione del driver Node.js utilizzata era quella corrente al momento della stesura degli esempi precedenti. Le versioni più recenti del driver supportano ancora quello stile di callback, ma la maggior parte dei nuovi progetti ora preferisce le promise e async/await, perché il codice risultante si legge dall'alto verso il basso senza callback annidati. I passaggi seguenti riscrivono la stessa connessione Employee utilizzando la sintassi moderna.
- Crea una singola istanza di MongoClient al di fuori di qualsiasi funzione, passando la stringa di connessione una sola volta, ad esempio const client = new MongoClient(url);
- Bando attendi la connessione del client() all'interno di una funzione asincrona per aprire la connessione invece di passare una callback.
- Ottieni il database con client.db('EmployeeDB') invece di fare affidamento sull'oggetto restituito all'interno di una funzione di callback.
- Esegui query con attenderedi strumenti adatti, questi await db.collection('Employee').find().toArray(), che restituisce direttamente un array invece di richiedere una funzione di callback del cursore.
- Chiudi la connessione con attendi la chiusura del client() all'interno di un blocco finally, quindi viene sempre eseguito, anche se una query genera un errore.
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);
Entrambi gli stili si connettono allo stesso database EmployeeDB e alla stessa collezione Employee, quindi il codice esistente basato su callback non deve essere riscritto immediatamente. I due approcci possono coesistere mentre un progetto migra gradualmente e la scelta dipende principalmente da quale MongoDB La versione del driver Node.js ha un file package.json già bloccato.
Come creare un'app Node Express con MongoDB per archiviare e servire contenuti
Dopo aver trattato entrambi gli stili di connessione, la sezione successiva applica il classico modello di callback all'interno di un'applicazione Express completa, poiché questa è la sintassi utilizzata dal server di esempio originale riportato di seguito. Creazione di un'applicazione con una combinazione di Express e MongoDB è abbastanza comune al giorno d'oggi.
Quando si lavora con JavaCopione Nelle applicazioni web, si sente spesso parlare di stack MEAN.
- Il termine stack MEAN si riferisce a una raccolta di JavaTecnologie basate su script utilizzate per sviluppare applicazioni web.
- MEAN è l'acronimo di MongoDB, ExpressJS, AngularJSe Node.js.
Quindi, è sempre bene capire come funziona Node.js e MongoDB lavorare insieme per fornire applicazioni che interagiscono con i database backend.
Diamo un'occhiata a un semplice esempio di come possiamo usare "express" e "MongoDB" insieme. Il nostro esempio utilizzerà la stessa raccolta Employee nel file MongoDB Database EmployeeDB.
Ora integreremo Express per visualizzare i dati sulla nostra pagina web quando vengono richiesti dall'utente. Quando la nostra applicazione viene eseguita su Node.js, potrebbe essere necessario navigare fino a URL http://localhost:3000/Employeeid.
Quando viene avviata la pagina, verranno visualizzati tutti gli ID dipendente nella raccolta Employee. Vediamo quindi lo snippet di codice nelle sezioni che ci permetteranno di raggiungere questo obiettivo.
Passo 1) Definire tutte le librerie che devono essere utilizzate nella nostra applicazione, che nel nostro caso è sia the MongoDB e biblioteca espressa.
Code Spiegazione:
- Stiamo definendo la nostra libreria 'espressa', che verrà utilizzata nella nostra applicazione.
- Stiamo definendo il nostro 'MongoDB', che verrà utilizzata nella nostra applicazione per la connessione al ns MongoDB Banca dati.
- Qui stiamo definendo il URL del nostro database a cui connettersi.
- Infine, definiamo una stringa che verrà utilizzata per memorizzare la nostra raccolta di ID dipendenti che dovranno essere visualizzati nel browser in seguito.
Passo 2) In questo passaggio, otterremo tutti i record nella nostra raccolta "Dipendente" e lavoreremo con essi di conseguenza.
Code Spiegazione:
- Stiamo creando un percorso verso la nostra applicazione chiamata "Employeeid". Quindi ogni volta che qualcuno accede a http://localhost:3000/Employeeid della nostra applicazione, verrà eseguito lo snippet di codice definito per questa route.
- Qui stiamo ottenendo tutti i record nella nostra raccolta "Employee" tramite il comando db.collection('Employee').find(). Assegniamo quindi questa raccolta a una variabile chiamata cursore. Usando questa variabile cursore potremo sfogliare tutti i record della collezione.
- Ora stiamo utilizzando la funzione cursor.each() per navigare tra tutti i record della nostra raccolta. Per ogni record, definiremo uno snippet di codice su cosa fare quando si accede a ciascun record.
- Infine, vediamo che se il record restituito non è nullo, allora stiamo prelevando il dipendente tramite il comando “item.Employeeid”. Il resto del codice serve solo a costruire un codice HTML corretto che consentirà ai nostri risultati di essere visualizzati correttamente nel browser.
Passo 3) In questo passaggio, invieremo il nostro output alla pagina web e faremo in modo che la nostra applicazione sia in ascolto su una porta particolare.
Code Spiegazione:
- Qui stiamo inviando l'intero contenuto che è stato costruito nel passaggio precedente alla nostra pagina web. Il parametro 'res' ci consente di inviare contenuto alla nostra pagina web come risposta.
- Stiamo facendo in modo che la nostra intera applicazione Node.js sia in ascolto sulla porta 3000.
Produzione:
Dall'uscita,
- Mostra chiaramente che tutti gli EmployeeID nella raccolta Employee sono stati recuperati. Questo perché usiamo il file MongoDB driver per connettersi al database e recuperare tutti i record dei dipendenti e successivamente utilizzare "express" per visualizzare i record.
Ecco il codice come riferimento
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() {});
Nota: cursor.each potrebbe essere deprecato in base alla versione del tuo MongoDB autista. È possibile aggiungere //noinspection JSDeprecatedSymbols prima di cursor.each per aggirare il problema. In alternativa, puoi usare forEach. Di seguito è riportato il codice di esempio che utilizza 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() {});












