Node.js MongoDB Tutorial con ejemplos
โก Resumen inteligente
Node.js MongoDB La integraciรณn permite que una aplicaciรณn Node se conecte con una base de datos NoSQL, ejecute operaciones CRUD y exponga registros en tiempo real a travรฉs de rutas Express, utilizando el controlador nativo de mongodb junto con Mongoose para el modelado de datos basado en esquemas.

Casi todas las aplicaciones web modernas tienen algรบn tipo de sistema de almacenamiento de datos en el backend. Por ejemplo, si tomamos el caso de una tienda en lรญnea.ping En la aplicaciรณn, datos como el precio de un artรญculo se almacenarรญan en la base de datos.
El marco Node js puede trabajar con bases de datos tanto relacionales (como Oracle y MS SQL Server) y bases de datos no relacionales (como MongoDB). En este tutorial, veremos cรณmo podemos usar bases de datos desde aplicaciones de Node js.
Bases de datos Node.js y NoSQL
A lo largo de los aรฑos, las bases de datos NoSQL como MongoDB y bases de datos relacionales como MySQL Se han vuelto muy populares como bases de datos para almacenar informaciรณn. La capacidad de estas bases de datos para almacenar cualquier tipo de datos, y en particular en cualquier formato, es lo que las hace tan utilizadas.
Node.js tiene la capacidad de trabajar con ambos MySQL y MongoDB como bases de datos. Para utilizar cualquiera de estas bases de datos, debe descargar y utilizar los mรณdulos necesarios mediante el administrador de paquetes de Node.
Para MySQL, el mรณdulo requerido se llama โmysqlโ. Para MongoDBLos desarrolladores pueden instalar la versiรณn nativa oficial. mongodb controlador, que es el paquete utilizado en todos los ejemplos de cรณdigo de este artรญculo, o una biblioteca basada en esquemas como Mangosta una vez que la aplicaciรณn necesite mรกs estructura.
Con estos mรณdulos, puedes realizar las siguientes operaciones en Node.js
- Administrar el pool de conexiones: aquรญ es donde puede especificar la cantidad de conexiones. MySQL Conexiones de bases de datos que Node.js debe mantener y guardar.
- Crear y cerrar una conexiรณn a una base de datos. En cualquier caso, puede proporcionar una funciรณn de devoluciรณn de llamada que se puede llamar cada vez que se ejecutan los mรฉtodos de conexiรณn "crear" y "cerrar".
- Se pueden ejecutar consultas para obtener datos de las respectivas bases de datos para recuperar datos.
- La manipulaciรณn de datos, como insertar, eliminar y actualizar datos, tambiรฉn se puede lograr con estos mรณdulos.
Para los temas restantes, veremos cรณmo podemos trabajar con MongoDB bases de datos dentro Node.js, comenzando con una rรกpida comparaciรณn de las dos formas mรกs comunes de hablar MongoDB de un proyecto Node.js.
MongoDB Controlador nativo vs. Mongoose en Node.js
Los nombres de los mรณdulos mencionados anteriormente pueden resultar confusos, ya que Node.js ofrece dos formas diferentes de comunicarse con MongoDB: el nativo mongodb el conductor y el Mangosta ODM (biblioteca de modelado de datos de objetos). Cada ejemplo de cรณdigo posterior en este artรญculo utiliza el controlador nativo, instalado con npm instala mongodb y se accede a travรฉs de Cliente MongoMongoose envuelve ese mismo controlador y agrega definiciones de esquema, validaciรณn y mรฉtodos de modelo reutilizables, lo que resulta adecuado para aplicaciones mรกs grandes que necesitan una estructura de datos predecible en muchas colecciones. Entender la diferencia de antemano evita confusiones al instalar paquetes o leer otros documentos de Node.js. MongoDB Ejemplos disponibles en lรญnea. La siguiente tabla compara ambas opciones para que el desarrollador pueda elegir la herramienta adecuada para cada proyecto.
| Aspecto | Controlador nativo de MongoDB | Mangosta |
|---|---|---|
| Instalaciรณn | npm instala mongodb | npm install mongoose |
| Cumplimiento del esquema | Ninguno, los documentos se mantienen flexibles | Definido a travรฉs de un objeto Schema |
| Curva de aprendizaje | Mรกs bajo, mรกs cercano al crudo MongoDB consultas | Mรกs arriba, aรฑade su propia capa de API |
| Mejores para | Scripts pequeรฑos y cรณdigo sensible al rendimiento | Aplicaciones mรกs grandes con modelos de datos consistentes |
Tip: Sigue utilizando el controlador nativo mientras aprendes los fundamentos. MongoDB comandos, luego pasar a Mangosta una vez que la aplicaciรณn necesite validaciรณn de esquema en varias colecciones.
El uso de MongoDB y Node.js
Una vez aclarada la terminologรญa, el resto de este artรญculo utiliza exclusivamente el controlador nativo, tal como aparece en los ejemplos de cรณdigo a continuaciรณn. Como se comentรณ en el tema anterior, MongoDB es una de las bases de datos mรกs populares utilizadas junto con Node.js.
Durante este capรญtulo, veremos cรณmo establecer conexiones con un MongoDB base de datos y cรณmo realizar las operaciones normales de lectura de datos de una base de datos, asรญ como insertar, eliminar y actualizar registros en una MongoDB base de datos.
Para los fines de este capรญtulo, supongamos que tenemos lo siguiente MongoDB datos en su lugar.
Nombre de la base de datos: EmployeeDB
Nombre de la colecciรณn: Empleado
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
- Instalaciรณn de los mรณdulos NPM
Necesita un controlador para acceder a Mongo desde una aplicaciรณn Node. Hay varios controladores Mongo disponibles, pero MongoDB estรก entre los mรกs populares. Para instalar el MongoDB mรณdulo, ejecute el siguiente comando
npm instala mongodb
- Crear y cerrar una conexiรณn a un MongoDB base de datos. El siguiente fragmento de cรณdigo muestra cรณmo crear y cerrar una conexiรณn a un MongoDB base de datos.
Code Explicaciรณn:
- El primer paso es incluir el MongoDB El mรณdulo del controlador se configura mediante la funciรณn require. Una vez instalado este mรณdulo, podemos utilizar las funciones necesarias para establecer conexiones con la base de datos.
- A continuaciรณn, especificamos nuestra cadena de conexiรณn a la base de datos. En la cadena de conexiรณn, se pasan 3 valores clave.
- El primero es 'mongodb', que especifica que nos estamos conectando a una base de datos mongoDB.
- El siguiente es "localhost", lo que significa que nos estamos conectando a una base de datos en la mรกquina local.
- El siguiente es 'EmployeeDB' que es el nombre de la base de datos definida en nuestro MongoDB base de datos.
- El siguiente paso es conectarnos a nuestra base de datos. La funciรณn de conexiรณn toma nuestra URL Ademรกs, permite especificar una funciรณn de devoluciรณn de llamada. Esta se ejecutarรก cuando se establezca la conexiรณn con la base de datos. Esto nos permite saber si la conexiรณn con la base de datos se realizรณ correctamente o no.
- En la funciรณn, escribimos la cadena โConexiรณn establecidaโ en la consola para indicar que se creรณ una conexiรณn exitosa.
- Finalmente, cerramos la conexiรณn usando la declaraciรณn db.close.
Si el cรณdigo anterior se ejecuta correctamente, la cadena "Conectado" se escribirรก en la consola como se muestra a continuaciรณn.
- Consulta de datos en un MongoDB base de datos de CRISPR Medicine News - Utilizando la MongoDB controlador tambiรฉn podemos recuperar datos del MongoDB base de datos. La siguiente secciรณn mostrarรก cรณmo podemos usar el controlador para recuperar todos los documentos de nuestra colecciรณn Employee en nuestra base de datos EmployeeDB. Esta es la colecciรณn en nuestra MongoDB base de datos, que contiene todos los documentos relacionados con los empleados. Cada documento tiene una identificaciรณn de objeto, un nombre de empleado y una identificaciรณn de empleado para definir los valores 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 Explicaciรณn:
- En el primer paso, creamos un cursor (un cursor es un puntero que se utiliza para apuntar a los distintos registros obtenidos de una base de datos. El cursor se utiliza luego para iterar a travรฉs de los diferentes registros en la base de datos. Aquรญ definimos un nombre de variable llamado cursor que se utilizarรก para almacenar el puntero a los registros obtenidos de la base de datos) que apunta a los registros que se obtienen de la colecciรณn MongoDb. Tambiรฉn tenemos la facilidad de especificar la colecciรณn 'Employee' de la que obtener los registros. La funciรณn find() se utiliza para especificar que queremos recuperar todos los documentos de la MongoDB colecciรณn.
- Ahora estamos iterando a travรฉs de nuestro cursor y para cada documento en el cursor vamos a ejecutar una funciรณn.
- Nuestra funciรณn simplemente va a imprimir el contenido de cada documento a la consola.
Nota: - Tambiรฉn es posible obtener un registro especรญfico de una base de datos. Esto se puede hacer especificando la condiciรณn de bรบsqueda en la funciรณn find(). Por ejemplo, supongamos que solo desea obtener el registro que tiene el nombre del empleado como Guru99, entonces esta afirmaciรณn se puede escribir de la siguiente manera
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})
Si el cรณdigo anterior se ejecuta correctamente, se mostrarรก el siguiente resultado en su consola.
Salida:
Desde la salida,
- Podrรกs ver claramente que se han recuperado todos los documentos de la colecciรณn. Esto es posible utilizando el mรฉtodo find() de la conexiรณn mongoDB (db) e iterando por todos los documentos utilizando el cursor.
- Insertar documentos en una colecciรณn โ Los documentos se pueden insertar en una colecciรณn utilizando el mรฉtodo insertOne proporcionado por MongoDB Biblioteca. El siguiente fragmento de cรณdigo muestra cรณmo podemos insertar un documento en una colecciรณn de 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 Explicaciรณn:
- Aquรญ estamos usando el mรฉtodo insertOne del MongoDB biblioteca para insertar un documento en la colecciรณn de Empleados.
- Estamos especificando los detalles del documento que debe insertarse en la colecciรณn de Empleados.
Si ahora compruebas el contenido de tu MongoDB base de datos, encontrarรก el registro con Employeeid de 4 y EmployeeName de โNewEmployeeโ insertado en la colecciรณn Employee.
Nota: La consola no mostrarรก ningรบn resultado porque el registro se estรก insertando en la base de datos y no se puede mostrar ningรบn resultado aquรญ.
Para comprobar que los datos se han insertado correctamente en la base de datos, es necesario ejecutar los siguientes comandos en MongoDB
- Utilice la base de datos de empleados
- db.Empleado.find({Empleadoid:4})
La primera declaraciรณn garantiza que estรก conectado a la base de datos de EmployeeDb. La segunda declaraciรณn busca el registro que tiene la identificaciรณn de empleado 4.
- Actualizar documentos en una colecciรณn โ Los documentos se pueden actualizar en una colecciรณn utilizando el mรฉtodo updateOne proporcionado por MongoDB Biblioteca. El siguiente fragmento de cรณdigo muestra cรณmo actualizar un documento en una colecciรณn de 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 Explicaciรณn:
- Aquรญ estamos usando el mรฉtodo "updateOne" del MongoDB biblioteca, que se utiliza para actualizar un documento en una colecciรณn mongoDB.
- Estamos especificando los criterios de bรบsqueda de quรฉ documento necesita ser actualizado. En nuestro caso, queremos encontrar el documento que tiene el Nombre de Empleado de "Nuevo Empleado".
- Luego queremos establecer el valor del nombre del empleado del documento de "Nuevo empleado" a "Mohan".
Si ahora compruebas el contenido de tu MongoDB base de datos, encontrarรก el registro con Employeeid de 4 y EmployeeName de "Mohan" actualizado en la colecciรณn de Empleados.
Para comprobar que los datos se han actualizado correctamente en la base de datos, es necesario ejecutar los siguientes comandos en MongoDB
- Utilice la base de datos de empleados
- db.Empleado.find({Empleadoid:4})
La primera declaraciรณn garantiza que estรก conectado a la base de datos de EmployeeDb. La segunda declaraciรณn busca el registro que tiene la identificaciรณn de empleado 4.
- Eliminar documentos de una colecciรณn โ Los documentos se pueden eliminar en una colecciรณn utilizando el mรฉtodo "deleteOne" proporcionado por el MongoDB Biblioteca. El siguiente fragmento de cรณdigo muestra cรณmo eliminar un documento en una colecciรณn de MongoDB.
var MongoClient = require('mongodb').MongoClient; var url = 'mongodb://localhost/EmployeeDB'; MongoClient.connect(url, function(err, db) { db.collection('Employee').deleteOne( { "EmployeeName": "Mohan" } ); });
Code Explicaciรณn:
- Aquรญ estamos usando el mรฉtodo "deleteOne" del MongoDB biblioteca, que se utiliza para eliminar un documento en una colecciรณn mongoDB.
- Estamos especificando los criterios de bรบsqueda de quรฉ documento debe eliminarse. En nuestro caso, queremos encontrar el documento que tiene el nombre de empleado "Mohan" y eliminarlo.
Si ahora compruebas el contenido de tu MongoDB base de datos, encontrarรก el registro con Employeeid de 4 y EmployeeName de "Mohan" eliminado de la colecciรณn de Empleados.
Para comprobar que los datos se han actualizado correctamente en la base de datos, es necesario ejecutar los siguientes comandos en MongoDB
- Utilice la base de datos de empleados
- db.Empleado.find()
La primera declaraciรณn garantiza que estรก conectado a la base de datos de EmployeeDb. La segunda declaraciรณn busca y muestra todos los registros en la colecciรณn de empleados. Aquรญ podrรกs ver si el registro ha sido eliminado o no.
Modern Async/Await MongoDB Conexiones en Node.js
El MongoClient.connect(url, callback) El patrรณn utilizado a lo largo de este artรญculo coincide con el MongoDB Versiรณn del controlador de Node.js vigente cuando se escribieron los ejemplos anteriores. Las versiones recientes del controlador aรบn admiten ese estilo de devoluciรณn de llamada, pero la mayorรญa de los proyectos nuevos ahora prefieren promesas y async/await, ya que el cรณdigo resultante se lee de arriba a abajo sin devoluciones de llamada anidadas. Los pasos a continuaciรณn reescriben la misma conexiรณn de empleado utilizando la sintaxis moderna.
- Cree una รบnica instancia de MongoClient fuera de cualquier funciรณn, pasando la cadena de conexiรณn una sola vez, por ejemplo const cliente = nuevo MongoClient(url);
- Llame hoy al esperar cliente.connect() dentro de una funciรณn asรญncrona para abrir la conexiรณn en lugar de pasar una funciรณn de devoluciรณn de llamada.
- Obtรฉn la base de datos con cliente.db('EmployeeDB') en lugar de depender del objeto devuelto dentro de una funciรณn de devoluciรณn de llamada.
- Ejecutar consultas con await, Por ejemplo esperar a que db.collection('Employee').find().toArray(), que devuelve una matriz directamente en lugar de requerir una funciรณn de devoluciรณn de llamada del cursor.
- Cierre la conexiรณn con esperar cliente.close() dentro de un bloque finally para que siempre se ejecute, incluso si una consulta arroja un error.
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);
Ambos estilos se conectan a la misma base de datos EmployeeDB y a la misma colecciรณn Employee, por lo que no es necesario reescribir inmediatamente el cรณdigo existente basado en callbacks. Los dos enfoques pueden coexistir mientras un proyecto migra gradualmente, y la elecciรณn depende principalmente de cuรกl MongoDB La versiรณn del controlador Node.js ya tiene un archivo package.json fijado.
Cรณmo crear una aplicaciรณn Node Express con MongoDB para almacenar y servir contenido
Una vez cubiertos ambos estilos de conexiรณn, la siguiente secciรณn aplica el patrรณn clรกsico de devoluciรณn de llamada dentro de una aplicaciรณn Express completa, ya que esa es la sintaxis que utiliza el servidor de ejemplo original a continuaciรณn. Construir una aplicaciรณn con una combinaciรณn de Express y MongoDB es bastante comรบn hoy en dรญa.
Cuando se trabaja con JavaScript En el caso de las aplicaciones web, normalmente se oye hablar del tรฉrmino pila MEAN.
- El tรฉrmino pila MEAN se refiere a una colecciรณn de JavaTecnologรญas basadas en scripts utilizadas para desarrollar aplicaciones web.
- MEAN es un acrรณnimo de MongoDB, ExpressJS, AngularJSy Node.js.
Por lo tanto, siempre es bueno entender cรณmo funcionan Node.js y MongoDB trabajar juntos para ofrecer aplicaciones que interactรบan con bases de datos backend.
Veamos un ejemplo simple de cรณmo podemos usar "express" y "MongoDB" juntos. Nuestro ejemplo harรก uso de la misma colecciรณn de Empleados en el MongoDB Base de datos de EmployeeDB.
Ahora incorporaremos Express para mostrar los datos en nuestra pรกgina web cuando el usuario los solicite. Cuando nuestra aplicaciรณn se ejecuta en Node.js, es posible que necesite navegar a la URL http://localhost:3000/Employeeid.
Cuando se inicia la pรกgina, se mostrarรกn todos los ID de empleados de la colecciรณn Employee. Veamos el fragmento de cรณdigo en secciones que nos permitirรก lograr esto.
Paso 1) Definir todas las bibliotecas que deben usarse en nuestra aplicaciรณn, que en nuestro caso es tanto la MongoDB y biblioteca exprรฉs.
Code Explicaciรณn:
- Estamos definiendo nuestra biblioteca 'express', que se utilizarรก en nuestra aplicaciรณn.
- Estamos definiendo nuestro 'MongoDB' biblioteca, que se utilizarรก en nuestra aplicaciรณn para conectarse a nuestro MongoDB base de datos.
- Aquรญ estamos definiendo el URL de nuestra base de datos a la que conectarse.
- Finalmente, estamos definiendo una cadena que se utilizarรก para almacenar nuestra colecciรณn de identificaciones de empleados que deberรกn mostrarse en el navegador mรกs adelante.
Paso 2) En este paso, ahora obtendremos todos los registros de nuestra colecciรณn "Empleado" y trabajaremos con ellos en consecuencia.
Code Explicaciรณn:
- Estamos creando una ruta a nuestra aplicaciรณn llamada "Employeeid". Entonces, cada vez que alguien navega hacia http://localhost:3000/Employeeid de nuestra aplicaciรณn se ejecutarรก el fragmento de cรณdigo definido para esta ruta.
- Aquรญ obtenemos todos los registros de nuestra colecciรณn 'Empleado' a travรฉs del comando db.collection('Employee').find(). Luego asignamos esta colecciรณn a una variable llamada cursor. Usando esta variable de cursor podremos navegar por todos los registros de la colecciรณn.
- Ahora estamos usando la funciรณn cursor.each() para navegar por todos los registros de nuestra colecciรณn. Para cada registro, definiremos un fragmento de cรณdigo sobre quรฉ hacer cuando se accede a cada registro.
- Finalmente, vemos que si el registro devuelto no es nulo, entonces estamos tomando al empleado mediante el comando "item.Employeeid". El resto del cรณdigo es sรณlo para construir un cรณdigo HTML adecuado que permitirรก que nuestros resultados se muestren correctamente en el navegador.
Paso 3) En este paso, enviaremos nuestra salida a la pรกgina web y haremos que nuestra aplicaciรณn escuche en un puerto en particular.
Code Explicaciรณn:
- Aquรญ enviamos todo el contenido que se creรณ en el paso anterior a nuestra pรกgina web. El parรกmetro โresโ nos permite enviar contenido a nuestra pรกgina web como respuesta.
- Estamos haciendo que toda nuestra aplicaciรณn Node.js escuche en el puerto 3000.
Salida:
Desde la salida,
- Muestra claramente que se recuperaron todos los ID de empleado de la colecciรณn Empleado. Esto se debe a que utilizamos el MongoDB controlador para conectarse a la base de datos y recuperar todos los registros de los empleados y posteriormente utilizรณ "express" para mostrar los registros.
Aquรญ estรก el cรณdigo para su referencia.
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 puede estar obsoleto segรบn la versiรณn de su MongoDB conductor. Puede agregar //noinspection JSDeprecatedSymbols antes de cursor.each para evitar el problema. Alternativamente, puedes usar forEach. A continuaciรณn se muestra el cรณdigo de muestra usando 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() {});











