MongoDB y NodeJS. Operaciones básicas en MongoDB

GPS Open Source NewsHola, hoy vamos a hablaros del potencial que tienen conjuntamente MongoDB y NodeJS. Estas dos herramientas Open Source se usan frecuentemente en nuevos proyectos. En el artículo de hoy, vamos a comentaros cómo crear desde cero un proyecto con estas dos tecnologías, pero antes veamos, qué es cada una.

¿Qué es MongoDB y NodeJS?

MongoDB es la base de datos NoSQL más popular del momento. Este tipo de base de datos, ofrece la ventaja, entre otras muchas, de crear registros «a medida» sin una estructura fija definida. Por ejemplo, en una base de datos relacional (como MySQL), se empieza a trabajar con una tabla «empleados» en la que únicamente se guardan los datos de nombre y apellido. Años más tarde, se requiere incluir la «delegación» en la base de datos, y agregar dicha información solo a los empleados que están en una delegación, no los empleados de la oficina central.

Diferencia entre base de datos relacional y NoSQL

En una base de datos relacional se tendría que crear una tabla de «delegaciones» y unir a los empleados con un campo nuevo dejando con valor «null» a los empleados que trabajan en central. Con MongoDB, lo tenemos más fácil, únicamente a los empleados que están en delegación, se le podrá añadir el atributo «delegación», evitando así ocupar un espacio innecesario añadiendo valores nulos. Por ejemplo:

{ nombre: "Carlos", apellidos: "Yébenes Dorado", delegación: "Madrid" }
{ nombre: "Antonio", apellidos: "Hidalgo Jiménez", delegación: "Sevilla" }
{ nombre: "Elsa", apellidos: "Sánchez Delgado" }
{ nombre: "David", apellidos: "González López" }

En el ejemplo anterior, los dos primeros trabajarían en delegación, pero los dos últimos trabajarían en central. Se podría añadir más atributos a los mismos, como por ejemplo, el campo «fechaBaja» únicamente a los empleados que ya no trabajan en la empresa. No es necesaria tener una estructura fija con MongoDB.

¿Qué es NodeJS?

NodeJS es un nuevo lenguaje de programación que permite ejecutar código JavaScript en la parte del servidor. Hasta ahora, JavaScript, se usaba para realizar pequeñas operaciones en el navegador, como eventos en un botón, validación de formularios, etc. Pero ahora podemos usar nodeJS como servidor web con tan solo unas líneas de código, remplazando así a Apache o Nginx. Una de las ventajas de NodeJS es que al estar basado en JavaScript, la curva de aprendizaje para un programador web, es muy rápida, al tener nociones de JavaScript.

Ahora que ya sabemos qué son cada uno, vamos a crear nuestra primera aplicación desde cero.

Creación del proyecto

En este ejemplo vamos a prescindir del servidor web y usaremos directamente acciones definidas en ficheros JS. Previamente deberá estar instalado NodeJS y NPM.

1- Creación de la carpeta

Antes de nada, deberemos crear una carpeta vacía en la ruta que queramos. Esta carpeta contendrá el proyecto y deberemos acceder a ella para ejecutar los ficheros. Por ejemplo:

mkdir test_mongodb_nodejs

use test_mongodb_nodejs
2- Generamos el fichero package.json

Dentro de la carpeta, ejecutamos:

npm init

Este comando, nos preguntará mediante la consola, varios datos a rellenar, como la versión, el autor, licencia, etc. Lo podemos generar con las opciones por defecto pulsando intro en cada pregunta, pero hay un valor muy importante que debemos rellenar. Este valor es: «entry point: (index.js)». Si no se indicada nada, establecerá index.js. Este fichero, será el encargado de arrancar el proyecto.

Con estos datos, nos generará el fichero package.json, el cual le indica a NodeJS, las librerías y detalles del proyecto.

3- Instalamos el driver de MongoDB para NodeJS

Una vez generado el fichero package.json, deberemos instalar el driver de MongoDB  ejecutando:

npm install mongodb

Este comando generará una carpeta llamada «node_modules» con los paquetes necesarios para usar MongoDB y modificará el fichero package.json para poder usarlo.

4- Creamos nuestro primer empleado

Una vez creada la estructura y ficheros necesarios, ya podremos ejecutar nuestro proyecto. Para ello deberemos crear el fichero «index.js» con el siguiente contenido:

// Driver de MongoDB
 const MongoClient = require('mongodb').MongoClient;
 //Cadena de conexión
 const uri = "CADENA_DE_CONEXION_A_MONGODB";
 const conexion = new MongoClient(uri, { useNewUrlParser: true });
 //SI LA CONEXIÓN ES CORRECTA
 conexion.connect(err => {
     //DEFINIMOS LA TABLA
   const empleados = conexion.db("miempresa").collection("empleados");
   
   //INSERCIÓN DE UN EMPLEADO
   //Definimos los datos del empleado
   var empleado = { nombre: "Carlos", apellidos: "Yébenes Dorado" };

   //Realizamos la inserción con insertOne
   empleados.insertOne(empleado, function(err, res) {
       //Si hay error, devolverá el error
        if (err) throw err;
        //Si ha salido bien, lo mostrará en la consola
        console.log("Empleado insertado correctamente");
    });

   conexion.close();
 });

El código anterior, genera nuestra base de datos y nuestra colección (equivalente a una tabla de una base de datos relacional), e insertará el primer documento (registro) en la misma. Para ejecutarlo, usaremos:

node index.js

Podremos comprobar que se ha creado accediendo a la base de datos:

MongoDB y NodeJS

5- Creamos varios empleados

Con el comando insertOne hemos insertado un empleado, pero podemos insertar varios cambiando ligeramente el código con el comando insertMany:

// Driver de MongoDB
const MongoClient = require('mongodb').MongoClient;
//Cadena de conexión
const uri = "CADENA_DE_CONEXION_A_MONGODB";
const conexion = new MongoClient(uri, { useNewUrlParser: true });
//SI LA CONEXIÓN ES CORRECTA
conexion.connect(err => {
    //DEFINIMOS LA TABLA
  const empleados = conexion.db("miempresa").collection("empleados");
 
   //INSERCIÓN DE VARIOS EMPLEADOS
   var listaEmpleados = [
       { nombre: 'Arturo', apellidos: 'López de la Rosa'},
       { nombre: 'Alberto', apellidos: 'Domínguez Ramírez'},
       { nombre: 'Laura', apellidos: 'Cano Alumbreros'},
       { nombre: 'Héctor', apellidos: 'Fernández Lanza'},
       { nombre: 'Fernando', apellidos: 'Barrutia Rodríguez'},
       { nombre: 'Luis', apellidos: 'García Bueno'},
       { nombre: 'Carlos', apellidos: 'Martínez Pisuerga'},
       { nombre: 'Samuel', apellidos: 'Madrid Ocaña'},
       { nombre: 'Óscar', apellidos: 'Pérez Reverte'}
     ];

     empleados.insertMany(listaEmpleados, function(err, res) {
       //Si hay error, devolverá el error
        if (err) throw err;
        //Si ha salido bien, lo mostrará en la consola
        console.log("Empleados insertados correctamente");
    });
  
  conexion.close();
});

Podremos crear otro fichero (indexMany.js) y ejecutarlo con:

node indexMany.js

Después de esto habrá creado el resto de usuarios.

Son solo unos ejemplos, pero pueden servir como base para crear nuevos proyectos. Podéis ver más acciones disponibles de MongoDB en la siguiente página: https://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#insertOne

Si no quieres perderte artículos sobre MongoDB y NodeJS y otras tecnologías open source, suscríbete a nuestra newsletter. Con un solo email al mes, disfrutarás de estos artículos en tu bandeja de entrada.

Esperamos que os haya servido de ayuda.


Un saludo,

Equipo de base de datos