No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Base de Datos NoSQL

Curso de Base de Datos NoSQL

Adán Figueroa Jiménez

Adán Figueroa Jiménez

Bases de Datos de Grafos: Ejercicios y Casos de Uso

13/17
Recursos

Implementar una base de datos basada en grafos puede parecer desafiante, pero con Neo4j y su servicio Aura, es más sencillo de lo que parece. Solo necesitas un correo electrónico para empezar y crear instancias gratuitas donde puedes almacenar hasta 200.000 nodos y 400.000 conexiones.

¿Cómo crear una instancia en Neo4j Aura?

Para comenzar, debes ingresar a la página de Neo4j y hacer clic en “Aura Login”. Una vez allí, crea una nueva instancia gratuita. Descarga las credenciales que se generan, ya que las necesitarás más adelante. Este proceso puede tardar unos minutos, pero una vez completado, tendrás tu instancia lista para usar.

¿Cómo acceder y utilizar tu instancia de Neo4j?

Con tu instancia creada, haz clic en “Open” e ingresa las credenciales descargadas. Este será tu entorno de trabajo. Para empezar a crear nodos, usa la palabra reservada create seguida de paréntesis que contienen el identificador y el tipo de entidad del nodo.

¿Cómo crear tus primeros nodos?

Para crear un nodo, usa la siguiente sintaxis:

create (n:Person {name: "Alice", age: 24})

Este comando crea un nodo de tipo Person con las propiedades name y age. Puedes crear varios nodos en una sola línea:

create (n:Person {name: "Alice", age: 24}), (m:Person {name: "Samantha", age: 30}), (o:Person {name: "Bob", age: 29})

¿Qué es el lenguaje Cypher?

Cypher es el lenguaje de consulta para Neo4j. Se parece a SQL pero está optimizado para trabajar con datos en forma de grafos. Si deseas profundizar en Cypher, revisa la documentación oficial para aprender a realizar operaciones más complejas.

¿Cómo agregar conexiones entre nodos?

Para agregar conexiones, usa match para encontrar los nodos y create para establecer las relaciones:

match (a:Person {name: "Alice"}), (b:Person {name: "Bob"})
create (a)-[:FRIEND]->(b)

Este comando crea una relación de amistad entre Alice y Bob.

¿Cómo realizar consultas en tu base de datos de grafos?

Utiliza match para buscar nodos y sus relaciones, y return para especificar qué datos deseas obtener:

match (a:Person {name: "Alice"})-[:FRIEND]->(b)
return a.name, collect(b.name) as friends

Esta consulta devuelve el nombre de Alice y una lista de los nombres de sus amigos.

¿Por qué elegir una base de datos basada en grafos?

Las bases de datos de grafos permiten relaciones nativas entre nodos, lo que las hace más eficientes para ciertas consultas comparado con las bases de datos SQL tradicionales. Las operaciones complejas como los joins en SQL pueden ser costosas y lentas a medida que aumentan los datos, mientras que en Neo4j, las conexiones y consultas son rápidas y directas.

Aportes 7

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Me gusto esta clase, fue una gran explicación visual 👩‍💻
1\. updateOne(): \- Actualiza un solo documento que coincide con el filtro especificado. \- Si más de un documento coincide con el filtro, solo se actualiza el primero encontrado. \- Sintaxis básica: db.collection.updateOne(filter, update, options) 2\. updateMany(): \- Actualiza todos los documentos que coinciden con el filtro especificado. \- Sintaxis básica: db.collection.updateMany(filter, update, options) 3\. replaceOne(): \- Reemplaza un solo documento que coincide con el filtro especificado. \- A diferencia de updateOne(), reemplaza todo el documento, no solo campos específicos. \- Sintaxis básica: db.collection.replaceOne(filter, replacement, options) 4\. findAndModify(): \- Actualiza o reemplaza un solo documento y devuelve el documento (ya sea el original o el modificado). \- Permite realizar una operación atómica de búsqueda y modificación. Diferencias: \- updateOne() y updateMany() modifican campos específicos sin reemplazar todo el documento. \- replaceOne() reemplaza todo el documento. \- findAndModify() (y sus variantes modernas) permiten una operación atómica que combina búsqueda y modificación, y pueden devolver el documento original o modificado.
RETO: `MATCH (a:PERSON), (c:PERSON)` `WHERE a.name = 'Alice' AND c.name = 'Samanta'` `Create (a)-[:FRIEND]->(c)` ![](https://static.platzi.com/media/user_upload/image-ea83ff10-b61c-40b4-aeef-94fa5ce1eb9b.jpg) `MATCH(Alice:PERSON {name: 'Alice'})-[:FRIEND] -> (friends)` `RETURN Alice.name, collect(friends.name) AS FriendNames` ![](https://static.platzi.com/media/user_upload/image-9f52e947-2db1-4436-af82-bb111f87f47e.jpg) <https://platzi.com/p/iecgerman/>
# Introducción a las Bases de Datos basadas en Documentos ## 🧾 Resumen Las bases de datos documentales son un tipo de base de datos NoSQL diseñadas para almacenar y gestionar información en forma de **documentos estructurados**, generalmente en formatos como **JSON**, **BSON** o **XML**. Cada documento representa una unidad completa de datos (como un usuario, una orden o un producto) y se organiza mediante pares **clave-valor**, lo que permite una gran **flexibilidad** en su estructura. A diferencia de las bases de datos relacionales, no requieren un esquema fijo, lo cual las hace ideales para aplicaciones con datos cambiantes, como las desarrolladas por startups o sistemas que manejan múltiples formatos de entrada (por ejemplo, sensores, formularios, etc.). ## 📦 ¿Qué tipos de datos se pueden almacenar? Las bases documentales soportan una amplia variedad de tipos de datos, entre ellos: * 🧵 **Strings** – `"nombre": "Ana"` * 🔢 **Números** – `"edad": 27` * 📅 **Fechas** – `"fechaRegistro": "2024-04-01T15:00:00Z"` * 🧭 **Datos geoespaciales** – `"ubicacion": { "lat": 4.6097, "lng": -74.0818 }` * 🧩 **Objetos anidados** – `"direccion": { "calle": "Av. Siempre Viva", "numero": 742 }` * 📚 **Arreglos de valores simples** – `"intereses": ["música", "deportes", "viajes"]` * 🧱 **Arreglos de objetos** – `"ordenes": [ { "id": 1, "producto": "Laptop" }, { "id": 2, "producto": "Mouse" } ]` ## 🧭 ¿Cómo se manejan documentos jerárquicos? Los documentos en estas bases permiten estructuras **profundamente anidadas**, organizadas jerárquicamente. Por ejemplo: jsonCopyEdit`{` ` "nombre": "Pedro",` ` "direccion": {` ` "pais": "Colombia",` ` "ciudad": "Medellín",` ` "coordenadas": {` ` "lat": 6.2442,` ` "lng": -75.5812` ` }` ` }` `}` Esto elimina la necesidad de múltiples tablas y `JOINs`, facilitando lecturas más rápidas y directas. ## 🌟 Características principales CaracterísticaDescripción**Esquema flexible**Cada documento puede tener una estructura diferente, incluso dentro de la misma colección.**Lectura rápida**Toda la información relevante suele estar en un solo documento.**Escalabilidad horizontal**Se adaptan fácilmente a arquitecturas distribuidas.**Compatibilidad con datos semiestructurados**Ideal para manejar inputs JSON o APIs RESTful.**Facilidad de integración**Se integran fácilmente con aplicaciones modernas (especialmente en stack JS/Node). ## 🚀 ¿Por qué son útiles para Startups? * Permiten **pivotar** sin miedo a romper un esquema rígido. * Se pueden **probar nuevas funcionalidades** sin alterar toda la base de datos. * Soportan versiones de datos antiguos y nuevos simultáneamente. * Reducción en el **tiempo de desarrollo** y mantenimiento de infraestructura de datos. ## ⚙️ Aplicaciones prácticas ### ☀️ Ejemplo: Monitoreo de paneles solares jsonCopyEdit`{` ` "panelId": "A-123",` ` "modelo": "XG-Panel-400",` ` "sensores": [` ` { "tipo": "luz", "valor": 530, "unidad": "lux" },` ` { "tipo": "temperatura", "valor": 35, "unidad": "°C" }` ` ],` ` "timestamp": "2025-04-06T12:30:00Z"` `}` Cada panel puede tener diferentes sensores y cada documento se ajusta dinámicamente a las características del dispositivo. ## 📈 ¿Qué es una aplicación de series temporales? Una **serie temporal** consiste en registros almacenados a lo largo del tiempo, con una marca temporal que permite rastrear el comportamiento de un sistema. En una base documental, esto es tan sencillo como incluir un campo `timestamp` en cada documento. Ejemplo: jsonCopyEdit`{` ` "panelId": "A-123",` ` "valorLuz": 520,` ` "timestamp": "2025-04-06T12:00:00Z"` `}` Las consultas pueden filtrar por rango de tiempo, tipo de sensor, valores anormales, etc. MongoDB, por ejemplo, ofrece [colecciones de series temporales](https://www.mongodb.com/docs/manual/core/timeseries-collections/) optimizadas para este tipo de datos. ##
Se repitieron algunas personas xd![](https://static.platzi.com/media/user_upload/image-c29b7055-fe58-4d3b-9170-58abfbd5f57d.jpg)
![](https://static.platzi.com/media/user_upload/image-2ccc59f9-7605-4776-8b9d-dadeabec3012.jpg)
Aqui mi reto:![](https://static.platzi.com/media/user_upload/image-8f267af9-0e88-416e-867b-dc2a0e5bd333.jpg) ![](https://static.platzi.com/media/user_upload/image-f196b3d3-bff1-4850-a177-ac5e7ea74e9e.jpg)