Course
Un tutorial completo de NoSQL con MongoDB
A medida que se dispara la cantidad de datos producidos en la era digital, las bases de datos son cruciales para almacenar, gestionar y analizar grandes cantidades de datos. A grandes rasgos, existen dos tipos de bases de datos: Bases de datos SQL y NoSQL.
Las bases de datos SQL utilizan un formato estructurado, y los datos se organizan en tablas con esquemas. A diferencia de las bases de datos SQL, las bases de datos NoSQL ofrecen esquemas flexibles para almacenar datos semiestructurados y no estructurados. Proporcionan la infraestructura necesaria para gestionar y aprovechar los ingentes datos generados en el panorama digital actual.
Esta completa guía cubrirá los fundamentos de las bases de datos NoSQL, y los diferentes tipos de bases de datos NoSQL con ejemplos disponibles en la industria. Una vez que comprendamos estos conceptos básicos, nos sumergiremos en MongoDB, una popular base de datos NoSQL, y aprenderemos a realizar operaciones CRUD (Crear, Recuperar, Actualizar y Eliminar).
¿Qué es NoSQL?
NoSQL significa "Not Only SQL" (No sólo SQL) y se creó para hacer frente a las limitaciones de las bases de datos relacionales. Las bases de datos relacionales siguen una estructura rígida, tienen un formato tabular y utilizan SQL (Lenguaje de Consulta Estructurado) para manipular los datos.
Las bases de datos NoSQL ofrecen un enfoque más flexible para almacenar datos semiestructurados y no estructurados.
La principal ventaja de las bases de datos NoSQL es que son adecuadas para manejar grandes volúmenes de datos con estructuras variables. Las bases de datos NoSQL no tienen esquema, lo que permite una mayor agilidad y escalabilidad.
Sin embargo, estas ventajas tienen sus contrapartidas. Tienen una coherencia débil y un soporte limitado para consultas complejas. A pesar de estas limitaciones, se utilizan mucho por las ventajas que ofrecen y complementan a las bases de datos SQL.
Puedes leer más sobre las diferencias clave entre las bases de datos SQL y NoSQL y algunos consejos sobre cuándo elegir una u otra en otro tutorial.
Tipos de bases de datos NoSQL
Para satisfacer las necesidades de los distintos casos de uso, las bases de datos NoSQL utilizan diversos modelos de datos para organizarlos y acceder a ellos. Aquí tienes 4 tipos comunes de bases de datos NoSQL.
- La basada en pares clave-valor es la forma más sencilla de bases de datos NoSQL. Los datos se almacenan como pares de clave y valor y pueden recuperarse utilizando la clave. Algunos ejemplos son Redis y Amazon DynamoDB.
- Las bases de datos orientadas a columnas organizan los datos en columnas y no en filas. Esta estructura es eficaz para recuperar datos por columnas. Apache Cassandra, HBase y Google Bigtable están orientados a columnas.
- Las bases de datos basadas en grafos almacenan los datos en estructuras de grafos formadas por nodos, aristas y propiedades. Neo4j y Amazon Neptune son bases de datos gráficas muy populares.
- Los datos orientados a documentos se almacenan como documentos de tipo JSON. La estructura de un documento puede variar e incluso contener datos anidados. Se trata de una base de datos NoSQL muy utilizada. Algunos ejemplos son MongoDB y CouchDB.
Para saber más sobre los distintos tipos de bases de datos, te animamos a que consultes nuestro tutorial, Bases de datos NoSQL: Lo que todo científico de datos debe saber.
Después de aprender qué es NoSQL y los tipos de bases de datos NoSQL, es hora de practicar con las bases de datos NoSQL.
Tutorial NoSQL: Diseñar una base de datos NoSQL para una plataforma de blogs
Sumergirse en un ejemplo práctico del mundo real es crucial para comprender y experimentar con los conceptos que hemos tratado. Veamos un tutorial sobre NoSQL.
Supón que estás interesado en construir tu plataforma de blog. Te gustaría crear entradas de blog, permitir comentarios y mantenerlas actualizadas. Como sabes que los datos no están estructurados, tienes claro que una base de datos NoSQL como MongoDB sería adecuada para el caso de uso que nos ocupa.
MongoDB es una base de datos NoSQL de código abierto. En lugar de utilizar tablas, almacena los datos en documentos de tipo JSON. Esto permite representar fácilmente estructuras y relaciones complejas. Es fácil gestionar distintos tipos de datos, como texto, números o imágenes, que suelen existir en los blogs.
Empecemos por configurar MongoDB en tu máquina.
1. Configurar MongoDB
Instalar MongoDB es bastante sencillo. Podemos descargarlo e instalarlo desde el sitio web oficial de MongoDB. Las instrucciones varían según el sistema operativo, así que comprueba las instrucciones de instalación de tu sistema operativo en su documentación oficial.
Tras la instalación, inicia MongoDB. Simplemente abre el terminal y escribe lo siguiente según tu sistema operativo:
// Linux
sudo systemctl start mongod
//Mac OS
brew services start mongodb-community@7.0
Obtendremos una salida que dice "Se ha iniciado correctamente", como se muestra a continuación.
Salida: Iniciando MongoDB. (Ésta y todas las imágenes de abajo son del Autor)
La instalación de MongoDB incluye una shell de MongoDB llamada mongosh que podemos utilizar para interactuar con la base de datos MongoDB. Por tanto, podemos utilizarlo sin ninguna instalación adicional.
Inicia el intérprete de comandos de MongoDB ejecutando el siguiente comando en tu terminal:
mongosh
Ejecutando el comando mongosh
obtendrás la siguiente salida que indica la conexión a tu base de datos.
Inicia el intérprete de comandos de MongoDB.
Con MongoDB instalado, pasaremos a definir nuestro modelo de datos.
2. Definir el modelo de datos
Crearemos una base de datos llamada "blog" y dos colecciones llamadas "posts" y "comentarios". La colección "entradas" es para capturar las entradas del blog y la colección "comentarios" es para almacenar los comentarios sobre esas entradas.
Cada documento de entrada tendrá campos para el título, el contenido, el autor y la fecha de creación, mientras que cada documento de comentario incluirá campos para el contenido del comentario, el autor y el ID de entrada asociado.
Para listar todas las bases de datos existentes, ejecuta show dbs en el intérprete de comandos. Si es la primera vez que utilizas MongoDB, verás la siguiente salida.
Enumera las bases de datos existentes.
Por defecto, utilizaremos la base de datos de prueba. Aunque estamos en la base de datos de prueba, la base de datos no se crea hasta que insertamos un documento en una colección de la base de datos.
Para crear una nueva base de datos, ejecuta use .
En nuestro ejemplo, utilizaremos "blog" como nombre de nuestra base de datos. Sigue adelante y ejecuta use blog
para crear la nueva base de datos. Como ya hemos dicho, al ejecutar el comando show dbs
no se mostrará la nueva base de datos hasta que insertemos una colección en la base de datos. Por tanto, ejecuta los comandos siguientes para crear una colección.
// create database
use blog
// create collection
db.createCollection("posts")
db.createCollection("comments")
Ejecutando use blog
cambiarás la base de datos de "prueba" a "blog".
Salida: Crear base de datos y colección.
Después de crear las colecciones, podemos verificarlas con el comando show dbs
.
Lista de bases de datos.
Hemos creado con éxito una base de datos y colecciones.
3. Implementar operaciones CRUD
MongoDB admite cuatro operaciones CRUD (Crear, Leer, Actualizar, Eliminar) principales para interactuar con los datos:
- Crea: Para crear un documento en MongoDB, lo insertamos en una colección utilizando el método
insertOne()
oinsertMany()
. Los documentos pueden contener cualquier dato JSON válido, lo que permite un diseño flexible del esquema. - Lee: Para leer datos de MongoDB, consultamos con el método
find()
. Las consultas filtran los documentos en función de los criterios especificados y devuelven los resultados. - Actualización: Para actualizar los documentos, puedes utilizar
updateOne()
oupdateMany()
. Este método facilita la manipulación flexible de los datos. - Borrar: Para eliminar documentos de una colección, utilizamos el método
deleteOne()
odeleteMany()
. Las eliminaciones se realizan en función de criterios especificados, como la coincidencia con un valor de campo concreto.
Ya que hemos visto los comandos, vamos a ponerlos en práctica a través de nuestro caso práctico de blogging.
4. Crear una entrada de blog
Para insertar documentos en una base de datos MongoDB, existen dos métodos.
insertOne()
: Este método inserta un documento cada vezinsertMany()
: Utilizando este método, podemos insertar muchos documentos a la vez.
Utilicemos ambos métodos para añadir entradas de blog a la base de datos. En el código siguiente, creamos documentos en las colecciones "posts". Cada documento tiene un título, un contenido, un autor y una fecha de creación.
// use insertOne() method to insert one document to the "posts" collection
db.posts.insertOne({
title: "Introduction to NoSQL with MongoDB",
content: "MongoDB is a NoSQL database that stores data in JSON format",
author: "Arunn Thevapalan",
createdAt: new Date()
})
// array of blog post documents
var postsData = [
{
title: "Getting Started with MongoDB",
content: "Learn the basics of MongoDB",
author: "Arunn Thevapalan",
createdAt: new Date()
},
{
title: "Advanced MongoDB Techniques",
content: "Explore advanced features of MongoDB",
author: "Jim Murphy",
createdAt: new Date()
}
];
// use insertMany() to insert multiple documents
db.posts.insertMany(postsData);
Esta salida indica que el servidor MongoDB ha recibido y procesado correctamente la petición insertOne
.
Salida: Inserta un documento en una colección.
Del mismo modo, la siguiente salida indica que la solicitud insertMany
se ha procesado correctamente.
Salida: Inserta varios documentos en una colección.
Con el conocimiento de la operación Crear, lo siguiente es la operación Leer.
5. Consulta de entradas de blog
Podemos utilizar el método find()
para recuperar datos de colecciones. Para recuperar la entrada de blog anterior de nuestra colección de "entradas", ejecuta el comando siguiente.
db.posts.find()
El método find recuperará todos los documentos de la colección "posts". El siguiente resultado muestra todos los documentos que hemos insertado en el paso anterior.
Salida: Recuperar documentos de una colección.
6. Añadir un comentario a una entrada
Supongamos que queremos añadir algunos comentarios a una entrada, podemos insertar un documento en la colección "comentarios". Los comentarios están asociados a los blogs, por lo que mantendremos una referencia al ID del post.
// use an object id from any of the above entries
var postId = ObjectId("664bfc27f74ef93812b2179e")
// insert one comment
db.comments.insertOne({
postId: postId,
content: "Informative article!",
author: "Anne Smith",
createdAt: new Date()
})
Esta salida indica que el servidor MongoDB ha recibido y procesado la petición.
Salida: Crea un documento que haga referencia a otro documento.
7. Consulta de los comentarios de una entrada
Para recuperar los comentarios asociados a una entrada concreta del blog, se puede utilizar el método find()
con un filtro de consulta:
// retrieve the above comment
db.comments.find({postId: postId})
La siguiente salida muestra el comentario que insertamos en el paso anterior.
Salida: Busca un documento utilizando la consulta de búsqueda.
Una vez que los usuarios hayan creado entradas de blog, querrán poder actualizarlas más adelante. A continuación, vamos a ver cómo podemos actualizar los documentos existentes.
8. Actualizar una entrada del blog
De forma similar a la inserción, la actualización también puede hacerse individual o colectivamente.
updateOne()
: Este método actualiza un documento cada vezupdateMany()
: Este método actualiza muchos documentos a la vez.
Prueba a cambiar el título de la entrada del blog "Introducción a NoSQL con MongoDB" por "Guía para principiantes absolutos de NoSQL con MongoDB".
Como conocemos el ID de la entrada de uno de los pasos anteriores, ejecuta el siguiente código para cambiar el título. Asegúrate de actualizar el postId con el ID de tu documento.
var postId = ObjectId("664bfc27f74ef93812b2179e");
db.posts.updateOne(
{ _id: postId },
{ $set: { title: "Absolute Beginner guide to NoSQL with MongoDB"} }
);
// verify update
db.posts.find({_id: postId})
La salida indica que la solicitud se ha procesado correctamente. Ha encontrado 1 documento coincidente y ha modificado 1 documento.
Salida: Actualizar un documento.
9. Borrar una entrada del blog
Para borrar una entrada del blog se puede utilizar deleteOne()
. De forma similar a las operaciones anteriores, opcionalmente podemos utilizar deleteMany()
para eliminar varios documentos a la vez.
var postId = ObjectId("664bfc27f74ef93812b2179e");
// delete post
db.posts.deleteOne({ _id: postId });
// verify deletion -> no output
db.posts.find({_id: postId})
La salida confirma que la eliminación se ha realizado correctamente.
Salida: Eliminar un documento de una colección
Por supuesto, hemos simplificado el diseño de una plataforma de blogging, que generalmente es compleja con otras operaciones como destacados, me gusta, claps, recomendaciones, etc. Pero todas estas operaciones se basan en una de las operaciones CRUD y ahora tenemos una buena comprensión de estos conceptos subyacentes. Ahora te toca a ti explorar y experimentar con más funciones basadas en estas operaciones.
Conclusión
Este tutorial te ha introducido en las bases de datos NoSQL. Empezamos con los conceptos básicos, la definición de bases de datos NoSQL, en qué se diferencian de las bases de datos relacionales y sus tipos.
Además, lo ampliamos para cubrir MongoDB, una base de datos basada en documentos muy utilizada. Por último, nos ensuciamos las manos con un ejemplo sencillo para diseñar una base de datos para nuestra plataforma de blogs.
Es normal atascarse al diseñar una base de datos para un nuevo caso de uso, y te animamos a que consultes la documentación oficial para conocer las funciones y ejemplos actualizados.
Aquí tienes algunos cursos y tutoriales más profundos si estás deseando ampliar tus conocimientos sobre NoSQL.
Sigue aprendiendo con DataCamp
Course
Conceptos NoSQL
Course