Jugando Con MongoDB Atlas y un poco con JavaScript
Tags: javascript, mongodb, node
Published: 2020-07-04 05:29:03

Actualmente estoy jugando con algunos servicios en la nube como [heroku](https://dashboard.heroku.com/), [netlifly](https://www.netlify.com/), [vercel](https://vercel.com/?utm_source=next-site&utm_medium=banner&utm_campaign=next-website) y [MoongoDB Atlas](https://www.mongodb.com/cloud/atlas), este ultimo me agrado ya que es muy intuitivo al momento de generar bases de datos, *cluster* entre otras cosas, su versión ***free*** me parece muy completa, por lo cual decide generar una breve guía de como usarlo.


### 🤔 ¿Que es MongoDB Atlas?

Es un servicio en la nube para bases de datos desarrollado por el equipo de ***mongoDB***, es posible crear bases de datos las cuales son expuestas online lo cual permite conectar nuestras aplicaciones, Atlas se encarga de todos los aspectos de *hosting*, *instalación* y *actualizaciones*, por lo que solo nos encargaremos de las configuraciones básicas, como gestionar accesos, crear bases de datos, crear alertas, etc.

### 👐 Manos a la obra

El primer paso es crear una cuenta en el sitio de [MongoDB Atlas](https://www.mongodb.com/cloud/atlas). Al entrar en enlace anterior se mostrar la pagina principal en la que procederemos a seleccionar la opción ***Sign In***.

![Fig 1: Página principal de MongoDB Atlas.](https://dev-to-uploads.s3.amazonaws.com/i/b3sdkim3oo3mccrxr78u.png)

Dicha opción nos mostrara una pantalla de ***Login*** en la que se tienen las siguientes opciones.

- Acceder en el caso de tener una cuenta existente.

- Acceder con una cuenta de ***Google***.

- ***Sign up*** la cual permite generar nuestro registro.

> 🔖 **Nota:** La opción de login dependerá de las preferencias del lector.

Si el registro se creo correctamente al iniciar sesión podremos ver el panel de administración, en el cual se mostrara el *proyecto* y *cluster* por defecto.

![Fig 2: Página principal de la cuenta](https://dev-to-uploads.s3.amazonaws.com/i/ab2q2zr94ygncrw33ep6.png)


> #### Podemos utilizar el botón “Create a New Cluster” pero con esta acción se solicitara un pago.

### 🚫 Borrando un Cluster

Por cuestiones didácticas procederemos a borrar el *cluster* y el *proyecto* creados por defecto al momento de crear nuestra cuenta, para esto seguiremos el flujo siguiente.

![Fig 3: Borrando el cluster por defecto](https://dev-to-uploads.s3.amazonaws.com/i/4gyngc6n5evluwr8chiy.gif)

> **🔖 Nota:** El proyecto es borrado ya que es la base para poder tener un cluster y por fines didácticos procederemos a borrar todo.

### 🛠 Creando un Cluster

Al borrar el *proyecto* y *cluster* procederemos a crear los propios, como la vez anterior seguiremos el siguiente flujo.

![Fig 4: Creando un nuevo proyecto y Cluster.](https://cdn-images-1.medium.com/max/3284/1*h5zOkyXiDHsqe52-ruYX9Q.gif)

Una de las ventajas de crear el *cluster* es que podemos indicar a uno de los siguientes proveedores *AWS, Google CloudPlatform o Azure*, otro punto importante es que nos muestra los tipos de *cluster* que se pueden crear.

> #### Shared Clusters: Para el desarrollo de aplicaciones pequeñas o para equipos que inician con MongoDB, prácticamente para poder probar el producto.

> #### Dedicated Clusters: Para desarrollos avanzados o entornos de producción.

#### Dedicated Multi-Region Clusters: Para el desarrollo de aplicaciones de clase mundial que requieren soporte multiregional o una [latencia](https://es.wikipedia.org/wiki/Latencia) muy baja.

> **🔖 Nota:** Al contar con una cuenta free procederemos a seleccionar la opción Shared Clusters.

### ⚙️ Configurando Network Access

Al finalizar la creación procederemos a brindar el acceso a ciertas *ip’s* en pocas palabras generaremos un ***whitelist***, para realizar esta tarea seguiremos el flujo siguiente.

![Fig 5: Creando un WhiteList](https://cdn-images-1.medium.com/max/3284/1*P1Zx3ndwJl0nEoWCK5IfNw.gif)

Al generar nuestro *WhiteList* cómo se puede ver en el flujo anterior se muestran algunas opciones las cuales son.

> #### Add Current IP Address: Con esta opción se agrega la ip publica del equipo con en el que estamos trabajando.
> #### Allow Access From AnyWhere: Esta opción permite agregar la opción de darle acceso a cualquier IP.

Existe otra opción la cual es “*This entry is temporary and will be deleted in*” la cual permite generar el acceso por un limite de tiempo a cualquiera delas opciones mencionadas anteriormente.

### 📡 Conectando una Aplicación

Para poder tener accesos al cluster creado tenemos que generar un nuevo usuarios y crear la cadena de conexión, por lo que para esta acción seguiremos el siguiente flujo.

![Fig 6: Creando un nuevo usuario y cadena de conexión.](https://cdn-images-1.medium.com/max/3284/1*3Bb32xQ8g5FFpLBhf06Wmw.gif)

Al generar un nuevo usuario procederemos a indicar cómo realizaremos la conexión para este caso tenemos 3 opciones las cuales son.

> #### Connect with the mongo shell: Permite conectarnos a mongoBD desde la consola del sistema siempre y cuando lo tengamos instalado

> #### Connect your application: Permite generar la cadena de conexión a utilizarla en nuestra aplicación.

> #### Connect using MongoDB Compass: Esta opción permite conectarnos usando la aplicación oficial de atlas.

### 👨🏻‍💻 Creando la aplicación

Antes de iniciar nuestra aplicación se es necesario contar son una instalación de **NodeJS** y se recomienda la siguiente estructura de carpetas.

![Fig 7: Estructura de carpetas.](https://cdn-images-1.medium.com/max/2000/1*TAdcruSFcx8XoKEug6y3XQ.png)

Inicial mente procederemos a crear el *package.json* en el cual procederemos a a instalar las siguientes dependencias

**moongose**: Con esta dependencia procederemos a realizar la conexión con [*MongoDB Atlas](https://www.mongodb.com/cloud/atlas) *y podremos interactuar con la *Base de Datos*.

**expressjs**: Lo utilizaremos para crear un servidor muy sencillo con el cual podremos ver las respuestas que nos mande *Atlas*.

**nodemon**: Se utilizara para que cada vez que generamos un cambio se genere un *auto-reload*.

{% gist https://gist.github.com/konami12/298a6499d59fa0f64bd5f73aac501515 %}

> **🔖 Nota:** Los próximos archivos todos serán generados dentro del directorio /src/.

El paso siguiente es crear el archivo *schema.js* el cual se puede considerar como un mapa de los campos a crear ademas podemos indicar el tipo de dato de cada unos de estos, en pocas palabras es el cuerpo de la colección a crear.

> #### Una colección dentro de mongoDB es el equivalente a las tablas que se manejan en MySql o SqlServer.

{% gist https://gist.github.com/konami12/21560c7089acb44e68f676669d4d233c %}

Por cuestiones didácticas vamos a crear un *JSON* llamado *fakeData.json* en el cual tendremos nombres y apellidos que tomaremos de manera aleatoria para crear registros dentro de *MongoDB.*

{% gist https://gist.github.com/konami12/fbe263d98e85362f710f00ca48791292 %}

Como paso final hay que generar el *index.js*  en el cual se establecerá la conexión y contara con 2 rutas que nos permitirán consultar la Base de Datos o crear nuevos registros.

{% gist https://gist.github.com/konami12/7a388c7f6eed0cdd816ac18b89a75e7e %}

En el script anterior la conexión realizada esta envolviendo a la inicialización del servidor esto es para que dicha conexión este disponible al iniciar el server, al crear el servidor se generar dos rutas las cuales son.

Consultar los datos.
[https://lr836.sse.codesandbox.io/](https://lr836.sse.codesandbox.io/)

Crear un nuevo registro de manera aleatoria, esta ruta como se muestra en el código tiene el ejemplo base de para generar un registro.

[https://lr836.sse.codesandbox.io/random](https://lr836.sse.codesandbox.io/random)

En el caso de que se tenga problemas ejecutando el código se cuenta con esta muestra para probarlo directamente o puede ir a [codeSandBox](https://codesandbox.io/s/mongodbatlas-lr836).

{% codesandbox mongodbatlas-lr836 %}

### 📝 Conclusiones

Atlas es una herramienta muy completa y potente ademas esta respaldada por el mismo equipo que creo MongoDB😱, entre otras de sus fortalezas es la seguridad que nos brinda con él control de accesos y creación de usuarios.

La conectividad con nuestra aplicación que generamos no fue compleja fue de los mas sencillo y transparente, com recomendación te sugiero leas la documentación de [Mongoose](https://mongoosejs.com/docs/guide.html) ya que tiene muchas funciones que permiten explotar a MongoDB Atlas.