MongoDB es más flexible que un espagueti. No nos impone esquemas ni estructuras super definidas. Podemos ser tan desordenados como yo en mi cuarto y aun así MongoDB no nos dice nada. MongoDB es libertad y por esto mismo puede romperse igual de fácil que un espagueti.
Un gran poder conlleva una gran responsabilidad.
Nuestro orden y buenas prácticas determinan qué base de datos es mejor para nosotros. Si nos gusta el orden y la calma, si disfrutamos de planear y organizar la estructura de nuestras aplicaciones, entonces, solo entonces, podemos disfrutar de todos los superpoderes de MongoDB.
En cambio, si somos rebeldes, si trabajamos con afán y solo queremos ver el mundo arder, entonces le debemos nuestras vidas a las reglas de los esquemas y las estructuras ultra definidas de SQL. Tu decides.

Tipos de base de datos y MongoDB
Existen 4 tipos de bases de datos no relacionales:
Key Value Stores: Son super sencillas y muy rápidas. Guardan nuestra información en formato de llaves y valores: llave: valor
. Son muy útiles para guardar caché y alguna información de sesión de los usuarios pero no podemos usarlas en casos más complejos donde necesitamos estructuras más especiales. El mejor ejemplo de estas bases de datos es Redis.
Graph Databases: Bases de datos basadas en Grafos. Los grafos son un tipo de datos donde todos los puntos de información pueden salir de cualquier parte y cada punto debe tener por lo menos una conexión con algún otro punto de información, es decir, otro grafo. Estas bases de datos nos ayudan a establecer conexiones entre nuestras entidades para realizar consultas de una forma más eficiente que en bases de datos relacionales. Ejemplos: Neo4j y JanusGraph.
Wide-column Stores: Son bases de datos columnares. Tienen una llave de fila y otra de columna para hacer consultas muy rápidas y guardar grandes cantidades de información. Pero, modelar los datos se puede volver un poco complicado. Podemos usarlas en Big Data, IoT, sistemas de recomendaciones, entre otras. Ejemplos: Cassandra y HBase.
Document Databases: Bases de datos basadas en documentos como MongoDB. Son muy flexibles y nos permiten guardar una gran cantidad de documentos (en vez de tablas) de forma distribuida.
Cómo funciona MongoDB
MongoDB es una base de datos gratis y de código abierto. Pertenece al mundo no relacional (NoSQL) y nos permite guardar una gran cantidad de documentos (en vez de tablas) de forma distribuida.
Entre sus características podemos destacar que MongoDB es “Schema Less”: tiene una muy baja rigidez que nos permite construir nuestros documentos con estructuras diferentes sin afectar el funcionamiento de nuestras aplicaciones. Esto no lo podemos hacer con las tablas de las bases de datos relacionales 😏.
Antes de seguir debemos aclarar algunos términos de MongoDB para hablar en el mismo lenguaje:
- Documentos:Son la unidad básica de MongoDB. Son los registros dentro de las colecciones donde guardamos nuestra información con el formato BSON, una representación binaria y con superpoderes de JSON (Binary JSON). Gracias a este formato tenemos mucha flexibilidad en los tipos de datos que podemos almacenar.
- Colecciones: Son agrupaciones de documentos. Son equivalentes a las tablas en bases de datos relacionales pero NO nos imponen un esquema o estructura rígida para guardar nuestra información y tienen muy buena performance.
- Bases de Datos: Son los contenedores físicos para nuestras colecciones. Cada base de datos tiene un archivo propio en el sistema de archivos de nuestra computadora o servidor.
- Clusters: Cada cluster puede tener múltiples bases de datos. MongoDB es una base de datos distribuida, lo que nos permite tener una gran escalabilidad horizontal. Esto significa que no solo podemos aumentar la capacidad de nuestros servidores (memoria, espacio, núcleos, etc), también podemos aumentar la cantidad de servidores para distribuir la carga de nuestras bases de datos.
Con MongoDB es muy fácil empezar nuestros desarrollos y añadir nuevas funcionalidades a medida que se nos van ocurriendo. Tenemos una gran flexibilidad para modelar o estructurar situaciones de la vida real gracias a la no rigidez de los documentos en formato BSON.
Además, ¿has escuchado de los documentos embebidos? Son documentos dentro de otros documentos. Nos ayudan a guardar nuestra información en un solo documento. Gracias a ellos evitamos consultar diferentes documentos y colecciones para obtener la información completa, en vez de solo por pedacitos.
Desorden y rebeldía en MongoDB
No podemos simplemente usar MongoDB así no más. Como te dije, MongoDB nunca nos impide ser desordenados como yo en mi cuarto. Pero, por esto mismo, las malas prácticas con los documentos embebidos también pueden ser nuestra perdición.
Verás, una colección puede tener cientos de documentos con formatos diferentes y sin sentido ni relación entre sí. Por ejemplo: Una colección de animales puede tener diferentes documentos de animales, por supuesto. Pero, cada documento puede tener información diferente.
Algunos pueden incluir la especie de cada animal y algunos otros campos pero, al mismo tiempo, otros documentos puede que no incluyan esta información. Algunos pueden entender la edad como un número y otros pueden más bien guardar la fecha de nacimiento.
Entre más grande son nuestras aplicaciones, más espagueti se puede volver nuestra información. Vamos a necesitar muchas horas en el psicólogo solo por leer nuestros documentos para entender cómo escribir las consultas más básicas. Por ser demasiado fácil, terminó siendo demasiado complicado. Cuando todo se puede, todo puede salir muy muy muy mal.
La rigidez de SQL es mejor que nuestras malas prácticas con MongoDB
El orden impuesto de SQL no es por nada. Aquí SQL tiene una enorme ventaja porque de ninguna manera nos permite este tipo de desorden. Si comparamos con MongoDB, desobedecer las reglas es mucho más complicado.
Las tablas son fáciles de entender. Las consultas pueden resultar relativamente obvias. Todo sigue su orden y tranquilidad. Aunque, por supuesto, nos tomara un buen tiempo implementar nuevas features.
No podemos añadir campos de prueba a solo una parte de nuestra base de datos. Por ejemplo, si queremos darle la opción a nuestros usuarios de seleccionar su color favorito, debemos seleccionar a ABSOLUTAMENTE TODOS nuestros usuarios de la base de datos y añadir el campo de color favorito con un valor por defecto.
Además, es necesario que creemos tablas diferentes para cada una de nuestras entidades. Siguiendo nuestro ejemplo, debemos separar a los animales de sus hábitats naturales (eso suena terrible) y unirlos por medio de referencias.
No es la mayor cosa pero ¡esto es terrible! Es como si SQL nos suplicara e hiciera todo lo posible para que no trabajemos en las nuevas características de nuestras aplicaciones.
En otras palabras: todo está muy bien separado y es muy fácil entender dónde están y cómo funcionan nuestras entidades. Pero (por ejemplo), si queremos la información completa de nuestros animales, debemos usar las referencias para hacer consultas compuestas a tablas diferentes dependiendo de qué tan compleja sea nuestra aplicación. En muchos casos esto resulta muy costoso.
Volvemos al mismo problema. Si no usamos buenas prácticas, vamos a tener un código espagueti imposible de entender.
¡BUENAS PRÁCTICAS, BUENAS PRÁCTICAS y BUENAS PRÁCTICAS!
Por el bien de tu psicólogo. Por amor a tu familia que te quiere mucho. Por amor a ti mismo o por lo que sea. Por favor, no trabajes con afán. No pienses que todo se resolverá mágicamente con el tiempo. Si no cuidamos nuestro trabajo vamos a pagar las consecuencias. ¡Nunca es tarde para volver al lado de la luz!
Desde el principio debemos pensar en el final. Podemos ahorrarnos muchos problemas si siempre pensamos cómo puede escalar nuestro trabajo puede escalar y cómo podemos optimizarlo.
Las buenas prácticas son como las buenas mamás. Siempre están encima regañando y tu estás harto de ellas. Te indican el camino correcto y te ayudan a caminar por él de la mejor forma posible. Pero, si las ignoras, van a dejar que te estrelles con la vida para que vuelvas a ellas y dejes tanta rebeldía.
Solo es una alegoría. No me hago responsable de que apliques mis consejos de programación a tu vida vida personal, mucho cuidado.
MongoDB nos permite toda la flexibilidad del mundo y la mejor forma de aprovechar todos estos beneficios es que nosotros mismos nos impongamos las reglas. Podemos pedir prestadas algunas buenas prácticas de SQL para ajustarlas un poco y sacar el mayor provecho de MongoDB.
Podemos usar tanto referencias como documentos embebidos para guardar la información de nuestras entidades. En muchos casos es mejor no abusar de los documentos embebidos y más bien separar nuestros documentos por colecciones dependiendo de las entidades que estamos manejando.
El objetivo de MongoDB NO es ser como SQL. Pero, aun así, debemos tener algunas conceptos muy claros. Por ejemplo: las relaciones, la forma en que nuestras entidades o documentos se encuentran enlazados unos con otros.
Retomando nuestro ejemplo de los animales, podemos juntar todo el poder de SQL y la flexibilidad de MongoDB para conseguir mejores resultados:
- Podemos usar una misma estructura para los documentos de nuestros animales.
- Podemos separar por colecciones la información de los animales y la de sus hogares.
- Podemos usar todo el poder de los documentos embebidos para guardar la información más importante de los hogares de nuestros animales junto con sus referencias. Así, podemos saber dónde vive cada animal y si necesitamos más información consultamos la colección de sus hogares.
Conclusiones
Te invito a tomar el Curso de MongoDB en Platzi. Vamos a aprender desde cero cómo funcionan las bases de datos no relacionales y cómo aprovechar todas las características de MongoDB para construir aplicaciones escalables y mantenibles al mismo tiempo.
No olvides que SQL sigue siendo muy importante. No tanto porque debamos usarlo (aunque, también), más bien, piensa en SQL como un estudio de las buenas prácticas que podemos traducir a MongoDB para obtener mejores resultados. Todo esto lo puedes aprender en el Curso de Fundamentos de Bases de Datos en Platzi 😉.
Por último y con mucho cariño, guarda este mensaje como una carta de tu mejor amigo: Di no a la rebeldía. Usa MongoDB con responsabilidad.
¡#NuncaParesDeAprender! 🤓💚
Curso Básico de MongoDB