0% encontró este documento útil (0 votos)
61 vistas17 páginas

SGBDnoR MongoDB

Este documento proporciona una introducción a MongoDB, un sistema de gestión de bases de datos no relacional. Explica las ventajas de MongoDB como su facilidad para el escalado horizontal y la flexibilidad en el almacenamiento de datos. También describe los conceptos básicos de MongoDB como colecciones, documentos, operaciones CRUD e incluye ejemplos de consultas.

Cargado por

YUNG GENGAR
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
61 vistas17 páginas

SGBDnoR MongoDB

Este documento proporciona una introducción a MongoDB, un sistema de gestión de bases de datos no relacional. Explica las ventajas de MongoDB como su facilidad para el escalado horizontal y la flexibilidad en el almacenamiento de datos. También describe los conceptos básicos de MongoDB como colecciones, documentos, operaciones CRUD e incluye ejemplos de consultas.

Cargado por

YUNG GENGAR
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 17

Gestión de Bases de Datos

SGBD no Relacionales

Conchi Guisado Jurado


Raúl Ruiz Padilla

Curso 21-22
Índice
1. Introducción a MongoDB. Ventajas e Inconvenientes.
2. Instalación de MongoDB.
3. Colecciones y Documentos. Linking y Embedding.
4. Operaciones CRUD
4.1. Inserción de documentos.
4.2. Borrado de documentos
4.3. Actualización de documentos
4.4. Consultas
4.4.1. Consultas con tipos de datos simples
4.4.2. Consultas con arrays
4.4.3. Consultas con documentos embebidos o anidados
1. Introducción a MongoDB. Ventajas e inconvenientes.

Después de muchos años en los que los SGBD relacionales ocupaban


casi la totalidad del mercado de BBDD, han irrumpido con fuerza los
SGBDs no relacionales.
Existen varios tipos de SGBDnoR con múltiples implementaciones
comerciales:
● Orientados a objeto (db4o, GemStone,...)
● Documentales (MongoDB, CouchDB, SimpleDB...)
● Clave-valor (Cassandra, BigTable, Dynamo...)
● En grafo (HyperGraphDB, AllegroGraph, DEX...)
● Multivalor (OpenQM)
● Etc...
1. Introducción a MongoDB. Ventajas e inconvenientes.

Estos SGBDR no relacionales son bastante diferentes entre sí. Nosotros


nos vamos a centrar en MongoDB, un SGBD documental de código
abierto con una implantación creciente en el mercado.
Las dos ventajas fundamentales de MongoDB son:
● Facilidad para el escalado horizontal.
● Flexibilidad en el almacenamiento.
El inconveniente principal es la dificultad para establecer relaciones
entre los documentos o para consultar información que se encuentra
repartida entre distintos nodos.
2. Instalación de MongoDB.
Aunque MongoDb se ejecuta típicamente en un cluster de máquinas,
aquí nos limitaremos a instalarlo en un único nodo.
Se descarga gratuitamente de mongodb.com y existen versiones para
Linux y para Windows.
El proceso de instalación es muy sencillo y, una vez realizado, debéis
lanzar el proceso mongod para arrancar el servidor y el proceso mongo
para lanzar el intérprete de comandos (“shell”).
Para ver las BBDD existentes se usa el comando show dbs, para usar
una BD concreta emplearéis use nombreDB.
En cualquier momento podéis teclear help para obtener ayuda o exit
para salir.
3. Colecciones y Documentos. Linking y Embedding.
En MongoDB la información no se almacena en registros dentro de
tablas, ya que no se trata de un SGBD relacional.
En lugar de tablas, en MongoDB se emplean colecciones. A diferencia
de las tablas, las colecciones no tienen unos campos predefinidos.
Así, las colecciones no son más que un conjunto de documentos sin
una estructura predefinida pero que guardan información sobre objetos
similares de una forma u otra.
De esta forma, los documentos de una colección no tienen porque
contener siempre los mismos campos, sino que existe un alto grado de
flexibilidad en la información que almacenan.
Los documentos se escriben en formato JSON, aunque internamente se
almacenan en un formato llamado BSON.
3. Colecciones y Documentos. Linking y Embedding.

Veamos que puede contener un documento en MongoDB:

● Identificador del documento (Object_ID)


● Números (reales o enteros)
● Cadenas
● Fechas
● Listas o Arrays
● Subdocumentos (Embedding)
● Referencias a otros Documentos (Linking)

Veamos un ejemplo de esto sobre un documento real.


3. Colecciones y Documentos. Linking y Embedding.
{
“_id” : “4db3e2b3b22b3b4b5b5b5b05”
“title” : “El dolor del alumno nazareno de BBDD”,
“body” : “Nunca pensé que mi dolor pudiera ser tan grande, bla bla bla...”,
“published_at” : “20131-05-09T18:137:307-037:00”,
“author_info” : {
“_id” : “4dc8919331c0c00001000002”
“name” : “Samuel Guerra”
},
“tags” : [“MongoDB”, “NoSQL”, “Bases de datos”]
“comments” : [
{
“author_info” : { “name” : “Emi Alvarenga”, “email” : “[email protected]” },
“body” : “No quiero molestar, pero no me ha gustado mucho el post”,
“created_at” : “2011-05-10T10:14:01-04:00”
},
{
“author_info” : { “name” : “Alejandro Agroba”, “email” : “[email protected]” },
“body” : “Vaya mierda de post filosófico, no se entiende nada”,
“created_at” : “2011-05-10T10:14:09-07:00”
}
]

“liked_by” : [“4d7cf768e999f56f50000001”, “4da34c62ba875b4236700033”]

}
4. Operaciones CRUD

4.1. Inserción de documentos

Cuando se inserta un documento en una colección, ésta se creará


automáticamente si no existía ya. MongoDB proporciona los siguientes métodos
para insertar documentos en una colección:

● db.coleccion.insertOne(inserción) : inserta un solo documento en la colección


db.autores.insertOne(
{ nombre: “Samuel”, email:”'[email protected]”, grupos:[“futbol”,”informática”]})

● db.coleccion.insertMany(inserción) : inserta varios documentos en la


colección
db.autores.insertMany([
{ nombre:“Samuel”, email :”'[email protected]”, grupos: [“futbol”,”informática”]},
{ nombre : “Maria”, email :”'[email protected]”, grupos:: [“baloncesto”,”fisica”]}
])
4. Operaciones CRUD

4.2. Borrado de documentos

MongoDB proporciona los siguientes métodos para eliminar documentos en una


colección:

● db.coleccion.deleteOne(filtro) : elimina el primer documento en la colección


que cumple la condición
db.autores.deleteOne({nombre: “Samuel”})

● db.coleccion.deleteMany(condición) : elimina todos los documentos en la


colección que cumplen la condición
db.autores.deleteMany({ grupos: ”informática”})

db.autores.deleteMany({}) elimina todos los elementos de la colección


4. Operaciones CRUD

4.3. Actualización de documentos


MongoDB proporciona los siguientes métodos para actualizar documentos en una
colección:

● db.coleccion.updatetOne(filtro,actualización) : actualiza el primer documento


que cumple la condición en la colección
db.autores.updatetOne({nombre: “Samuel”}, {$set { email:”'[email protected]”}})

● db.coleccion.updateMany(filtro,actualización) : actualiza los documentos en la


colección que cumplen la condición
db.autores.updateMany({grupos: “informática”}, {$set {nombre:”Manuel”}})

● db.coleccion.replaceOne(filtro,actualización) : reemplaza el primer documento


que cumpla la condición en la colección por el indicado en la actualización
db.autores.replaceOne({ nombre: “María”}, {nombre:“Marial”, tlf: 666666666})
4. Operaciones CRUD
4.4.1. Consultas con tipos de datos simples
La sintaxis para consultas es bastante compleja pues los criterios de selección
deben escribirse en JSON, la forma más general sería:

db.coleccion.find({criterios de selección},{proyección});

Si quiero mostrar todos los documentos de una colección, la sintaxis a usar es


muy simple:

db.autores.find() o db.autores.find({}) o db.autores.find().pretty() – equivaldría a


select * from autores;

Como puedes ver, a todos los documentos se les agrega automáticamente un


campo llamado _id, cuyo valor es único dentro de la colección.

Para averiguar el número de documentos de una colección:

db.autores.count()
4. Operaciones CRUD
4.4.1. Consultas con tipos de datos simples
Si queremos filtrar la búsqueda de documentos incluyendo alguna condición, la
sintaxis se complica un poco. Veamos un ejemplo:

db.autores.find({nombre:”Alejandro Nieto”});
(equivale a select * from autores where nombre=”Alejandro Nieto”;)

Si queremos filtrar por más de una condición y que se cumplan TODAS,


debemos hacer:

db.autores.find({edad:18,sexo:”M”});
(equivale a select * from autores where edad=18 AND sexo=”M”;)

Si por el contrario lo que quiero es mostrar los documentos de la colección que


cumplan alguna de entre varias condiciones, la sintaxis se complica algo más:

db.autores.find({$or:[{edad:18},{sexo:”M”} ] } );
(Equivale a select * from autores where edad=18 OR sexo='M';
4. Operaciones CRUD
4.4.1. Consultas con tipos de datos simples
Si solo quiero mostrar algunos atributos del documento:

db.autores.find({},{nombre:1, email:1});
(Equivale a select nombre, email from autores;)

Si queremos mostrar la salida con una ordenación concreta, emplearemos el


modificador sort, así:

db.autores.find({},{nombre:1, email:1}).sort({edad:1})
(Equivale a select nombre, email from autores order by edad asc;)

Si queremos mostrar solo los primeros n documentos que cumplen los criterios
de la consulta podemos usar el modificador limit:

db.autores.find({},{nombre:1, email:1}).sort({edad:-1}).limit(3)

Si en el modificador sort usamos un -1 el orden será descendente.


4. Operaciones CRUD
4.4.1. Consultas con tipos de datos simples
Otros operadores útiles para la realización de consultas básicas son:uientes:

$in: (Equivale a IN)

db.productos.find({tipo:{$in:['Procesadores','Discos']}})

$gt, $gte, $lt, $lte: (Equivalen a >, >=,<,<=)

db.productos.find({precio:{$gte:2000}}, {nombre:1, precio:1})

$ne, $not, $nin: (Equivalen a !=, NOT y NOT IN)

db.productos.find({precio:{$ne:1000}}, {nombre:1, precio:1})

$exists (para mostrar los documentos para los que existe un campo
determinado, obviamente no hay equivalente en SQL)

db.productos.find({accesorios:{$exists:true}}, {nombre:1, precio:1})


4. Operaciones CRUD

4.4.2. Consultas con arrays


En MongoDB podemos tener un atributo en un documento que sea un array o
lista de valores. Por ejemplo, en una colección “posts”, algunos de los
documentos pueden tener un atributo “tags” donde podemos almacenar más de
un valor con las etiquetas de ese post.

db.posts.find({tags:['Procesadores','Discos']})

Muestra los posts cuyas etiquetas son exactamente Procesadores y Discos

db.posts.find({tags:{$all: ['Procesadores','Discos']}})

Muestra los posts cuyas etiquetas incluye Procesadores y Discos en cualquier


orden

db.posts.find({tags: 'Procesadores’})

Muestra los posts cuya etiqueta es Procesadores


4. Operaciones CRUD

4.4.3. Consultas con documentos embebidos o anidados


¿Y que hacemos con los documentos anidados?

En MongoDB podemos tener un atributo en un documento que sea a su vez un


documento. Por ejemplo, en nuestra colección “posts”, los documentos tienen
un atributo “author_info” que es a su vez un documento con la información del
autor del post.

Para consultar información dentro de un documento anidado en otro, la sintaxis


usa la notación puntuada:

posts.find({“author_info.name”=”Samuel Guerra”})

Con varios puntos podemos bajar varios niveles, por ejemplo para mostrar los
posts en los que hizo comentarios una persona determinada:

posts.find({comments.author_info.name=”Alejandro Agroba”})

También podría gustarte