Crea una base de datos con MongoDB

Crea una base de datos con MongoDB

Al iniciar estudios de bases de datos, solemos comenzar con MySQL que, a pesar de ser escalable y ampliamente utilizado, tiene algunas limitaciones. En algún momento, durante tu evolución en los estudios de bases de datos, es posible que te encuentres con una situación en la que necesites almacenar datos en arrays u objetos, algo que es imposible en MySQL sin crear una estructura de tablas.

Siendo un lenguaje más fácil y sencillo que MySQL, los sistemas que usan solo MongoDB se han vuelto cada vez más comunes.

En este artículo, entenderemos qué es MongoDB, cuáles son sus ventajas y desventajas, y luego veremos un ejemplo práctico de cómo crear un marco de backend usando Node.js y MongoDB.

¿Qué es MongoDB?


MongoDB es una base de datos no relacional, es decir, no está estructurada en tablas como MySQL. Además, en MongoDB podemos almacenar datos más complejos, como arrays y objetos. Debido a que tiene una estructura y un comando muy similar a JavaScript, termina siendo el preferido por muchos programadores. Esta tecnología ya la utilizan empresas como Google, Facebook y varias otras.

Ventajas de MongoDB

En MongoDB tenemos algo llamado colecciones, que serían algo parecido a las tablas en MySQL, sin embargo, a diferencia de MySQL, MongoDB puede tener varios documentos diferentes dentro de una colección, trabajando con datos heterogéneos. lo que proporciona una mayor flexibilidad en la creación de documentos.

Además, no necesitamos crear una estructura relacional diseñando el esquema de la base de datos.

Desventajas de MongoDB

Aunque eso es suficiente, usa mucha memoria y tiene un límite de 16 MB para almacenar documentos. También tenemos un límite para anidar objetos en formato BSON de 100 niveles, es decir, tenemos un límite para almacenar “objetos dentro de objetos” que es más que suficiente para la gran mayoría de los casos.


Cómo crear una aplicación Node.js con MongoDB

La idea de este proyecto es crear una base de datos para una tienda de celulares. La aplicación tendrá funciones como: registrar celulares, ver celulares registrados, ver un celular específico creado y editar un celular ya agregado.

Para comenzar, crearemos un directorio para la parte del backend.


mkdir backend

cd backend

mkdir src

npm init -y

Inicialmente, alteramos el package.json:

./package.json


Após isso, criaremos o ambiente docker com a Dockerfile e a docker-compose. Esses arquivos são responsáveis por garantir a execução da aplicação em um ambiente em que todas as ferramentas usadas estejam na versão correta.

touch Dockerfile

./Dockerfile


touch docker-compose.yml

./docker-compose.yml


Ahora especificamos los archivos raíz y las configuraciones de compilación en el archivo tsconfig.json.

touch tsconfig.json

./tsconfig.json

Con el entorno creado podemos iniciar los archivos encargados de crear y comunicarse con la base de datos.

Los archivos backend principales son app.ts y server.ts porque son los que inician el servidor de la base de datos. De esta forma, crearemos los archivos siguiendo estos pasos:

touch app.ts

./src/app.ts

Los imports hechos serán creados y explicados posteriormente en el archivo, pero con esta estructura será posible realizar acciones mediante la ruta  /celphones.

Ahora crearemos el archivo del servidor.

touch server.ts

./src/server.ts

Ahora que tenemos los archivos iniciales del servidor, podemos hacer el Model, capa que abstrae la comunicación con la base de datos y donde se realizará la conexión con MongoDB.

mkdir Models

cd Models

touch Connection.ts

./src/Models/Connection.ts


Con la conexión realizada, se crearán los archivos encargados de crear la Collection de celulares y de realizar las funciones de comunicación con la BD.

touch AbstractODM.ts

./src/Models/AbstractODM.ts

touch CelphonesODM.ts

./src/Models/CelphonesODM.ts

Con eso hecho, ya tenemos toda la comunicación y funciones para manipular y consultar la base de datos. Ahora, crearemos la Interfaz de celulares, algo que garantice cómo se deben recibir los datos del objeto.

Ahora volvemos a la raíz de ./src y creamos la Interfaz:

mkdir Interfaces

cd Interfaces

touch ICelphone.ts

./src/Interfaces/ICelphone.ts

Luego de crear la Interfaz , podemos crear el Dominio con clases que serán utilizadas por la capa de servicios para abstraer la parte de las funciones que modifican el objeto enviado o recibido.

Vuelva a la raíz ./src nuevamente y siga los pasos:

mkdir Domains

cd Domains

touch Celphone.ts

./src/Domains/Celphone.ts

Ahora haremos la capa de Service que usará las funciones de ese dominio.

./src

mkdir Services

cd Services

touch CelphoneServices.ts


Con la capa de servicios concluída, solo falta la capa Controller, donde hacemos nuestras requisiciones.

./src

mkdir Controllers

cd Controllers

touch CelphoneController.ts

./src/Controllers/CelphoneController.ts

Finalmente, tenemos toda nuestra estructura arquitecturizada y podemos crear las rutas a las que accederemos para llamar a las funciones.

Para eso, regresa a la raíz ./src y sigue estos pasos:

mkdir routes

cd routes

touch celularRoute.ts

./src/routes/celularRoute.ts

Finalmente, completamos nuestra aplicación. Para ejecutar y probar la funcionalidad, vuelva a la raíz del proyecto ./backend y ejecuta docker-compose con el siguiente comando:

./backend

docker-compose up -d

En seguida, ejecuta y entra a la terminal de la aplicación con el siguiente comando:

docker exec -it celular_shop bash

Dentro de la terminal, instala las dependencias y ejecuta el programa:

npm install

npm run dev

Si todo va bien, recibirás un mensaje informándoye en qué puerto se ejecuta el servidor.

Conclusión

En SQL debemos crear una estructura de datos compleja y visual, algo que requiere estar pensado y predefinido, lo que hace que SQL sea un poco restrictivo. También es importante recalcar que, en SQL, los datos deben seguir la misma estructura, algo que en MongoDB no es una realidad.

Al ser una base de datos NoSQL, MongoDB es mucho más dinámica, teniendo una estructura de datos que sigue el concepto de “clave-valor”. Esta flexibilidad permite que los programadores lo utilicen más fácilmente. Comprender ambas herramientas es importante para cualquier programador que estudie bases de datos, sin embargo, en la mayoría de los casos, optaría por MongoDB por facilidad.

¡Hasta luego!

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.