Mongo DB
Mongo DB
Meta
Entender el funcionamiento de Mongo DB, sus características y aplicaciones.
Resumen
Se explicará cómo funciona Mongo DB y como hacer las principales operaciones en él, sus comandos,
códigos, operaciones y métodos más relevantes.
Break 10 min
5 Bases de datos, Explicación del concepto y modo de Diapositivas – 15 min
colecciones y uso Mongo Shell
documentos en
Mongo DB
1
8 Borrar documentos Explicación del concepto y modo de Diapositivas – 15 min
de una colección con uso Mongo Shell
los métodos Delete
One y Delete Many
9 Modificar un Explicación del concepto y modo de Diapositivas – 15 min
documento mediante uso Mongo Shell
el método Update
One
10 Modificar múltiples Explicación del concepto y modo de Diapositivas – 15 min
documentos con el uso Mongo Shell
método Update Many
11 Operadores Lógicos Listado de los comandos, $and, $or, Diapositivas – 20 min
$not y código Mongo Shell
Saludo y bienvenida:
Salude a los estudiantes y pregúnteles sobre la clase anterior si buscaron más información al respecto y
cuénteles que se hará en esta clase.
Las bases de datos NoSQL tienen 4 grandes familias: Key Value Stores, basadas en grafos, columnares y
basadas en documentos.
Key Value Stores: Guardan la información en formato de llaves y valores. Las usamos para guardar cache,
información de sesión de los usuarios o cosas muy sencillas. Son muy rápidas de consultar, pero no podemos
Graph Databases: Bases de datos basadas en Grafos. Nos permiten establecer conexiones entre nuestras
entidades para realizar consultas de una forma más eficiente que en bases de datos relacionales (así como
Twitter o Medium donde cada publicación tiene diferentes relaciones entre sus usuarios, likes, etc). Por
ejemplo: Neo4j o JanusGraph.
Nos permite relacionar múltiples entidades. Mejor rendimiento que bases de datos relacionales.
Wide-column Stores: Bases de datos columnares. Tienen una llave de fila y otra de columnas para hacer
consultas muy rápidas y guardar grandes cantidades de información, pero modelar los datos se puede volver
un poco complicado. Las usamos en Big Data, IoT, sistemas de recomendaciones, entre otras. Por ejemplo:
Cassandra o HBase.
Document Databases: Bases de datos basadas en documentos. Nos permiten guardar documentos dentro
de colecciones, tiene muy buena performance y flexibilidad que nos permite modelar casos de la vida real de
forma sencilla y efectiva. Por ejemplo: MongoDB o CouchBase.
2
MongoDB y su ecosistema
MongoDB es una base de datos gratis y de código abierto No Relacional basada en documentos que nos
permite guardar una gran cantidad de documentos de forma distribuida. Mongo también es el nombre de la
compañía que desarrolla el código de esta base de datos.
Una de sus principales características es que nos permite guardar nuestras estructuras o documentos en
formato JSON (no exactamente JSON, pero si algo muy parecido, lo veremos más adelante) para tener una
gran flexibilidad a la hora de modelar situaciones de la vida real.
Por ser una base de datos distribuida podemos hablar no de uno sino de varios servidores, lo que conocemos
como el Cluster de MongoDB. Gracias a esto obtenemos una gran escalabilidad de forma horizontal
(escalabilidad en cantidad de servidores).
MongoDB es “Schema Less” lo que permite que nuestros documentos tengan estructuras diferentes sin
afectar su funcionamiento, algo que no podemos hacer con las tablas de las bases de datos relacionales. Su
lenguaje para realizar queries, índices y agregaciones es muy expresivo.
MongoDB Atlas
Tenemos varios proveedores que nos permiten utilizar o alquilar MongoDB como servicio y en este caso
vamos a usar MongoDB Atlas por ser desarrollado por las mismas personas que desarrollan MongoDB.
• Alta disponibilidad
• Altamente escalable
MongoDB + Drivers
3
Son las librerías que utilizamos para comunicar nuestra aplicación con nuestra base de datos. Sin nuestros
drivers no podemos trabajar con nuestros clústeres de base de datos.
MongoDB es una base de datos open source, NoSQL y basada en documentos que nos permite guardar una
gran cantidad información de forma distribuida. Mongo también es el nombre de la compañía que desarrolla
el código de esta base de datos. Los drivers de MongoDB son librerías oficiales o desarrolladas por la
comunidad que podemos usar para comunicar nuestras aplicaciones con las bases de datos. Una de las más
populares es Mongoid, un ORM que convierte nuestros código Ruby en queries que entiende nuestra base de
datos.
• Colecciones: no imponen esquema y son equivalente a una tabla en una db relacional, pero estas
almacenan documentos.
• Documentos: son registros de una colección, estos pueden contener diferente estructura y se
guardan en formato BSON que permite almacenar más tipos de datos, la conversión de JSON a
BSON la hace a través de drivers.
4
Operaciones CRUD desde la consola de MongoDB
Conexión con el clúster de MongoDB Atlas: mongo "URL DE NUESTRO CLUSTER", (recuerda añadir tu IP a
Seleccionar una base de datos: use NOMBRE_BD. Debemos crear por lo menos un documento si la base de
datos es nueva porque MongoDB no crea bases de datos vacías.
5
Encontrar elementos en una colección: db.NOMBRE_COLECCIÓN.find() Podemos aplicar filtros si queremos
o encontrar solo el primer resultado con el método findOne().
use base1
db.libros.drop()
db.libros.insertOne({
_id: 1,
titulo: 'El aleph',
autor: 'Borges',
editorial: ['Siglo XXI', 'Planeta'],
precio: 20,
cantidad: 50
})
db.libros.insertOne({
_id: 2,
titulo: 'Martin Fierro',
autor: 'Jose Hernandez',
editorial: ['Siglo XXI'],
precio: 50,
cantidad: 12
})
db.libros.insertOne({
_id: 3,
titulo: 'Aprenda PHP',
autor: 'Mario Molina',
editorial: ['Siglo XXI', 'Planeta'],
precio: 50,
cantidad: 20
})
db.libros.insertOne({
_id: 4,
6
Atomicidad.
Cuando se usa InsertMany(), es atomico a nivel de documento, se pueden escribir uno o dos documentos
pero si hay algún error en alguno ese no se escribe.
https://docs.mongodb.com/manual/core/write-operations-atomicity/
Operadores relacionales $eq, $gt, $gte, $lt, $lte, $in, $nin y $ne
• $in - in - dentro de
7
Veamos con algunos ejemplos como utilizar estos operadores para recuperar documentos que cumplen
determinadas condiciones.
Recuperar todos los libros que en el campo cantidad hay un valor distinto a 50:
Recuperar todos los libros cuyo precio estén comprendidos entre 20 y 45:
Hay que acostumbrarse en un principio a utilizar estos operados para filtrar documentos de una colección,
luego veremos que estos operadores también se emplean cuando efectuemos borrados y modificaciones de
documentos.
8
Borrar documentos de una colección con los métodos deleteOne y deleteMany
• deleteMany: Borra todos los documentos que cumplen la condición que le enviamos.
Si queremos eliminar el documento que almacena en el campo el _id con valor 1 luego podemos utilizar la
sintaxis:
db.libros.deleteOne({ _id: 1 })
Lo más conveniente es utilizar el método 'deleteOne' ya que solo uno puede cumplir esa condición al ser la
clave primaria del documento.
Recordemos que la sintaxis alternativa para eliminar el documento con _id con valor 1 es:
La sintaxis anterior es buena recordar ya que los otros operadores relacionales hay que utilizarlos en forma
obligatoria y no tienen una sintaxis alternativa como el $eq.
Para borrar todos los libros que tienen un precio mayor o igual a 50 tenemos:
Con las bases de datos documentales tengamos en cuenta que los documentos pueden tener distintas
cantidades de campos. Por ejemplo, si queremos agregar el campo descripción al libro con '_id' 4 debemos
utilizar la sintaxis:
9
db.libros.updateOne({ _id: { $eq: 4 } }, { $set: { descripcion: 'Cada unidad trata un tem
a fundamental de Java desde 0.' } })
D
b.libros.updateOne({ _id: { $eq: 4 } }, { $unset: { descripcion: '' } })
Es importante entender que mediante el operador $unset eliminamos el campo, en cambio si utilizamos el
operador $set modificamos el contenido del campo, luego si ejecutamos:
Disponemos también de operadores de modificación para arreglos, veamos como podemos agregar y
eliminar elementos en el arreglo 'editorial':
De forma similar para eliminar un elemento del arreglo debemos emplear el operador $pull:
El segundo método que nos permite actualizar documentos, pero en forma masiva es el método
updateMany.
10
Operadores lógicos $and, $or y $not
Cuando necesitamos construir consultas que deban cumplir varias condiciones utilizaremos los operadores
lógicos.
Para los operadores $or y $not no hay una forma de disponer una sintaxis implícita.
Para recuperar los libros que tienen un precio mayor o igual a 50 o la cantidad es 1 debemos implementar
mediante un $or la siguiente sintaxis:
Si queremos recuperar todos los documentos de la colección libros que no tienen un precio mayor o igual a
50 la sintaxis debe ser:
Si queremos borrar todos los libros cuyo precio no sean iguales a 50 podemos codificar:
11
Valoración y cierre
Finalmente pregunte a los estudiantes: ¿Cómo les pareció la sesión? ¿Por qué? ¿Qué aprendieron hoy?
¿Qué fue lo que más les gusto?, resuelva dudas y organice el espacio de trabajo. Por último, invítelos a que
profundicen aún más en los temas que les interesaron.
Referencias Bibliografía
https://www.tutorialspoint.com/mongodb/index.htm
https://docs.mongodb.com/manual/tutorial/
https://www.javatpoint.com/mongodb-tutorial
https://www.javatpoint.com/mongodb-tutorial
https://www.w3schools.com/python/python_mongodb_getstarted.asp
https://www.w3schools.com/python/python_mongodb_getstarted.asp
https://www.datacamp.com/community/tutorials/introduction-mongodb-python
https://docs.atlas.mongodb.com/getting-started/
12