Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Mongo DB

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 68

BD NoSQL

Curso Especialización IA y Big Data


¿QUÉ SON?
NoSQL – “Not Only SQL” son bases de datos no-relacionales y altamente distribuidas.

Surgen por la necesidad de afrontar ciertos problemas de escalabilidad y rendimiento para


los que las BBDD relacionales resultan ineficientes cuando tienen que enfrentarse a
grandes volúmenes de datos.

Aportando:

● Simplicidad en los diseños.


● Escalado horizontal.
● Mayor control en la disponibilidad.

Curso Especialización IA y Big Data 2


CARACTERÍSTICAS
● Libre de esquemas
● Proporcionan replicación a través de escalado horizontal (Arquitectura distribuida)
● Consistencia débil
● Estructuras de datos sencillas
● Sistema de consultas propio
● Siguen el modelo BASE (Basic Availability, Soft State, Eventual Consistency) en lugar
de ACID (Atomicity, Consistency, Isolation, Durability)

Vemos estos dos modelos

Curso Especialización IA y Big Data 3


CARACTERÍSTICAS
● Modelo BASE
○ Basic Availability: El sistema garantiza disponibilidad, en términos del Teorema
de CAP
○ Soft State: El estado del sistema puede cambiar a lo largo del tiempo, incluso sin
entrada. Esto es provocado por el modelo de consistencia eventual.
○ Eventual Consistency: El sistema alcanzará un estado consistente con el
tiempo, siempre y cuando no reciba entrada durante este tiempo.

Curso Especialización IA y Big Data 4


CARACTERÍSTICAS
● Teorema de CAP
○ Consistency: Todos los nodos ven los mismos datos al mismo tiempo
○ Availability: Toda petición obtiene una respuesta en caso tanto de éxito como fallo
○ Partition Tolerance: El sistema seguirá funcionando ante pérdidas arbitrarias de
información o fallos parciales.

Curso Especialización IA y Big Data 5


VENTAJAS
● Ofrecen esquemas flexibles.
● Desarrollos más rápidos e iterativos.
● Ideales para datos semiestructurados y no estructurados
● Escalabilidad sencilla
● Alto rendimiento en consultas sobre datos que no implican relaciones jerárquicas
● Por tanto, son convenientes cuando:
○ No se tiene un gran presupuesto
○ Cuando las estructuras de datos son variables
○ Para la captura y procesado de eventos

Curso Especialización IA y Big Data 6


DESVENTAJAS
● Cuando el modelo ACID encaja mejor.
● No todas las BBDD contemplan atomicidad e integridad de los datos
● Falta de compatibilidad entre instrucciones SQL
● Falta de estandarización
● En definitiva cuando los datos deben ser consistentes sin dar posibilidad de error.

Curso Especialización IA y Big Data 7


TIPOS
● Documental
● Clave-Valor
● BBDD de grafos
● BBDD columnar

Curso Especialización IA y Big Data 8


BD DOCUMENTAL
● Una clave única para cada registro que normalmente suele ser un documento con una
estructura simple como JSON o XML.
● Se apoya en la utilización de documentos para almacenar información.
● Los documentos se agrupan en colecciones.
● Modelado flexible, recomendado para aplicaciones web, móviles o rrss que varían
constantemente.
● Escritura rápida y mayor rendimiento.

Curso Especialización IA y Big Data 9


BD Clave-Valor
● En este tipo de modelos cada elemento tiene asociada una clave única
● Tiene asociada una clave única lo que permite un acceso muy rápido.
● Su objetivo es la escalabilidad y la disponibilidad.
● Operaciones básicas get, put, delete.
● Recomendado allí donde es necesario un acceso muy rápido en un volumen inmenso
de datos.
○ Sesiones
○ E-shopping
● No existe un estándar para el manejo de datos.
● Un único método de acceso.

Curso Especialización IA y Big Data 10


BD columnar
Los datos de cada entrada están dispuestos uno debajo del otro.

● Cada entrada genera una columna


● Los datos están dispuestos uno debajo del otro
● Gira la BBDD orientada a filas:



● En el disco duro los datos se muestran de manera unidimensional:
○ 1,MongoDB,Documental,2,Cassandra,Key-value..
○ 1,2,3;MongoDB,Cassandra,Redshift…
● Aconsejado para evaluación en BigData
● Desaconsejado en aplicaciones transaccionales
Curso Especialización IA y Big Data 11
BD DE GRAFOS
Aquellas cuyas relaciones pueden representarse mediante grafos

● Representan la información con grafos:


○ Nodos: propiedades de los datos.
○ Aristas: relaciones entre los objetos.
● Utilizan algoritmos especiales para realizar las búsquedas:
○ Búsqueda en profundidad: el siguiente nodo más profundo.
○ Búsqueda en anchura: va moviéndose entre los niveles.
● Resultados en tiempo real.
● Estructuras flexibles y ágiles
● Difícil de escalar

Curso Especialización IA y Big Data 12


MongoDB
Es una de las bases de datos NoSQL más conocidas. Sigue un modelo de datos
documental, donde los documentos se basan en JSON.

Hay una serie de conceptos que conviene conocer antes de entrar en detalle

Curso Especialización IA y Big Data 13


ELEMENTOS MongoDB
● Bases de Datos:
○ Actúa cada una como un contenedor de alto
nivel
● Colecciones:
○ Una base de datos tendrá 0 o más colecciones.
○ Una colección es muy similar a lo que
entendemos como tabla dentro de un SGDB.
● Documentos:
○ Las colecciones contiene 0 o más documentos,
por lo que es similar a una fila o registro de un
RDMS.

Curso Especialización IA y Big Data 14


ELEMENTOS MongoDB
● Atributos:
○ Cada documento contiene 0 o más atributos, compuestos de parejas clave/valor.
○ Cada uno de estos documentos no sigue ningún esquema, por lo que dos
documentos de una misma colección pueden contener todos los atributos
diferentes entre sí.
● MongoDB soporta índices, igual que cualquier SGDB, para acelerar la búsqueda de
dato
● Al realizar cualquier consulta, se devuelve un cursor, con el cual podemos hacer cosas
tales como contar, ordenar, limitar o saltar documentos.

Curso Especialización IA y Big Data 15


BSON
Internamente, MongoDB almacena los documentos en BSON (Binary JSON)

BSON representa un superset de JSON, ya que:

● Almacena datos en binario


● Incluye un conjunto de tipos de datos no incluidos en JSON, como pueden ser
ObjectId, Date o BinData

Podemos consultar todos los tipos que soporta un objeto BSON en


http://docs.mongodb.org/manual/reference/bson-types/

Curso Especialización IA y Big Data 16


BSON
Ejemplo de objeto BSON

var yo = {
nombre: "Aitor",
apellidos: "Medrano",
fnac: new Date("Oct 3, 1977"),
hobbies: ["programación", "videojuegos", "baloncesto"],
casado: true,
hijos: 2,
fechaCreacion = new Timestamp()
}

Curso Especialización IA y Big Data 17


BSON
Los documentos BSON tienen las siguientes restricciones:

● No pueden tener un tamaño superior a 16 MB.


● El atributo _id queda reservado para la clave primaria.
● Los nombres de los campos no pueden empezar por $.
● Los nombres de los campos no pueden contener el ..

Curso Especialización IA y Big Data 18


Object_Id
En MongoDB, el atributo _id es único dentro de la colección, y hace la función de clave
primaria. Se le asocia un ObjectId, el cual es un tipo BSON de 12 bytes

Este identificador es global, único e inmutable. Esto es, no habrá dos repetidos y una vez un
documento tiene un _id, éste no se puede modificar.

Si en la definición del objeto a insertar no ponemos el atributo identificador, MongoDB creará


uno de manera automática. Si lo ponemos nosotros de manera explícita, MongoDB no
añadirá ningún ObjectId. Eso sí, debemos asegurarnos que sea único (podemos usar
números, cadenas, etc…).

Curso Especialización IA y Big Data 19


CREACIÓN BD
Crear una base de datos
use mibd

Crear una colección


db.createCollection ("books")

Curso Especialización IA y Big Data 20


INSERTAR DOCUMENTOS
insert()
> db.books.insert( { title:"Everyday Italian", lang:"en", autor:”Giada
De Laurentiis”, year:2005, price:10.00})

Si estamos en una situación en la que estamos insertando múltiples documentos, podemos


hacer la inserción más rápida utilizando batch inserts, que permiten insertar en bloque un
array de documentos a la colección. Esto se consigue con solo pasar un array de objetos al
comando insert.
> db.numerosprimos.insert(
[{_id:2},{_id:3},{_id:5},{_id:7},{_id:11},{_id:13},{_id:17},{_id:19},

Curso Especialización IA y Big Data 21


ACTUALIZAR DOCUMENTOS
Se utiliza el método update con 2 parámetros:
el primero es la consulta para averiguar sobre qué documentos
el segundo parámetro, los campos a modificar.

update hace un reemplazo de los campos, es decir, si en el origen había 100 campos y en
el update sólo ponemos 2, el resultado sólo tendrá 2 campos. ¡Cuidado que puede ser muy
PELIGROSO!

db.books.update({title:"Everyday Italian"}, → Qué actualizo


{lang:"es", year: 2010} → Con qué
)

Curso Especialización IA y Big Data 22


ACTUALIZAR DOCUMENTOS
Si cuando vamos a actualizar, en el criterio de selección no encuentra el documento sobre el
que hacer los cambios, no se realiza ninguna acción.

Si quisiéramos que en el caso de no encontrar nada insertase un nuevo documento, acción


conocida como upsert (update + insert), hay que pasarle un tercer parámetro al método con
el objeto {upsert:true}

Ejemplo upsert
>db.books.update( {title:"Horizontes Lejanos"},
{lang:"es", autor:"Anonimo", year:1805, price:20.00},
{upsert: true}
)

Curso Especialización IA y Big Data 23


ACTUALIZAR DOCUMENTOS
Para evitar el reemplazo, hay que usar la variable $set (si el campo no existe, se creará).

Por ejemplo, para modificar el salario haríamos:

Ejemplo $set
> db.books.update( {title:"Horizontes Lejanos"},
{$set: {price: 100.00}}
)

Curso Especialización IA y Big Data 24


ACTUALIZAR DOCUMENTOS
Mediante $inc podemos incrementar el valor de una variable.

> db.people.update( {nombre:"Aitor Medrano"},


{$inc:{salario: 1000}}
)
Para eliminar un campo de un documento, usaremos el operador $unset.

> db.books.update( {title:"Horizontes Lejanos"},


{$inc: {price: 50.00}}
)
Otros operadores que podemos utilizar son $nul, $min, $max y $currentDate.

Curso Especialización IA y Big Data 25


ACTUALIZAR DOCUMENTOS
Realmente podemos dividir las actualizaciones en cuatro tipos:
● reemplazo completo
● modificar un campo
● hacer un upsert
● o actualizar múltiples documentos

Para modificar múltiples documentos, en el tercer parámetro indicaremos {multi: true}.


¡Esta es una diferencia sustancial respecto a SQL!

> db.books.update( {lang:"en"},


{$inc: {price: 50.00}},
{multi:true}
)
Curso Especialización IA y Big Data 26
ARRAYS
Para trabajar con arrays necesitamos nuevos operadores que nos permitan tanto introducir
como eliminar elementos de una manera más sencilla que sustituir todos los elementos del
array.
Los operadores que podemos emplear para trabajar con arrays son:
● $push Añade un elemento
● $pushAll Añade varios elementos
● $addToSet Añade un elemento sin duplicados
● $pull Elimina un elemento
● $pullAll Elimina varios elementos
● $pop Elimina el primer o el último

Curso Especialización IA y Big Data 27


ACTUALIZAR DOCUMENTOS
Ejemplos de trabajo con arrays:

>db.books.insert( {title:”La Biblia”, lang:”en”,


autor:[”Pedro”,”Juan”,”Marcos”], year:2005, price:15.00}
)
>db.books.update({title:"La Biblia"}, {$push:{autor:"Lucas"}})
>db.books.update({title:"La Biblia"}, {$pushAll:{autor:["Maria",
"Eva"]}})
>db.books.update({title:"La Biblia"}, {$pull:{autor:"Lucas"}})

Curso Especialización IA y Big Data 28


ACTUALIZAR DOCUMENTOS
Operador posicional
Se expresa con el símbolo $ y nos permite modificar el elemento que ocupa una
determinada posición del array.

Supongamos que tenemos las calificaciones de los estudiantes (colección students) en un


documento con una estructura similar a la siguiente:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
y queremos cambiar la calificación de 80 por 82. Mediante el operador posicional haremos:

Modificando un array con el operador posicional


> db.students.update( { _id: 1, grades: 80}, {$set:{ "grades.$" : 82}} )

Es decir, el $ referencia al documento que ha cumplido el filtro de búsqueda.


Curso Especialización IA y Big Data 29
BORRAR DOCUMENTOS
Para borrar, usaremos el método remove, el cual funciona de manera similar a find. Si no
pasamos ningún parámetro, borra toda la colección documento a documento. Si le pasamos
un parámetro, éste será el criterio de selección de documentos a eliminar.

> db.books.remove({title:"La Biblia"})

Al eliminar un documento, no podemos olvidar que cualquier referencia al documento que


existe en la base de datos seguirá existiendo. Por este motivo, manualmente también hay
que eliminar o modificar esas referencias.

Curso Especialización IA y Big Data 30


BORRAR DOCUMENTOS
Si queremos borrar toda la colección, es más eficiente usar el método drop, ya que también
elimina los índices.

> db.books.drop()

Recordad que eliminar un determinado campo de un documento no se considera un


operación de borrado, sino una actualización mediante el operador $unset.

Curso Especialización IA y Big Data 31


CONSULTAR DOCUMENTOS
Para recuperar los datos de una colección o un documento en concreto usaremos el método
find():

Ejemplo de consulta con find()

> db.books.find()

Si sólo queremos recuperar un documento hemos de utilizar findOne():

> db.books.findOne()

Curso Especialización IA y Big Data 32


CONSULTAR DOCUMENTOS
Si queremos una vista formateada de los datos del documento encontrado con find
podemos utilizar el sufijo .pretty().

> db.books.find().pretty()

Curso Especialización IA y Big Data 33


CRITERIOS EN LAS CONSULTAS
Al hacer una consulta, si queremos obtener datos mediante más de un criterio, en el primer
parámetro del find podemos pasar un objeto JSON con los campos a cumplir (condición Y).

> db.books.find({title:"La Biblia", lang:"en"}

Curso Especialización IA y Big Data 34


OPERADORES RELACIONALES
MongoDB también ofrece operadores lógicos para los campos numéricos:

> db.books.find({ price:{$gt:10} })


> db.books.find({ lang:"en", price:{$gte:15} })

● $lt menor que (<)


● $lte menor o igual que (≤)
● $gt mayor que (>)
● $gte mayor o igual que (≥)

Curso Especialización IA y Big Data 35


OPERADORES RELACIONALES
Para los campos de texto, además de la comparación directa, podemos usar el operador
$ne para obtener los documentos cuyo campos no tienen un determinado valor.

> db.books.find({lang:{$ne:"es"}})

Consulta con condición de existencia de un campo

> db.books.find({"price":{$exists:true}})

Curso Especialización IA y Big Data 36


CONSULTAS DE TEXTO
Para realizar consultas sobre partes de un campo de texto, hemos de emplear expresiones
regulares. Para ello, tenemos el operador $regexp o, de manera más sencilla, indicando
como valor la expresión regular a cumplir:

Ejemplo de consulta con expresión regular

> db.people.find({nombre:/Aitor/})
> db.people.find({nombre:/aitor/i})
> db.people.find({nombre: {$regex:/aitor/i}})

Curso Especialización IA y Big Data 37


CONSULTAS DE TEXTO
Es necesario crear un índice de texto en los campos para realizar la búsqueda de texto.
Podemos crearlo con uno o varios campos
>db.books.createIndex({"description":"text"})
>db.books.createIndex({"subtitle":"text","description":"text"})
La expresión $text tiene la siguiente sintaxis:
{
$text:
{
$search: <string>,
$lenguage: <string>, Opcional
$caseSensitive: <boolean>, Opcional
$diacriticSensitive: <boolean> Opcional
}
}
Curso Especialización IA y Big Data 38
PROYECCIÓN DE CAMPOS
Las consultas realizadas hasta ahora devuelven los documentos completos. Si queremos
que devuelva un campo o varios campos en concreto, hemos de pasar un segundo
parámetro de tipo JSON con aquellos campos que deseamos mostrar con el valor true o 1.
Destacar que si no se indica nada, por defecto siempre mostrará el campo _id

> db.books.findOne({title:”La Biblia"},{title:true, lang:true});

Si queremos que no se muestre el _id, lo podremos a false o 0:

> db.books.findOne({title:”La Biblia"},{title:true, _id:false});

Curso Especialización IA y Big Data 39


CONDICIONES OBJETOS ANIDADOS
Si tenemos esta colección:
{
"producto" : "Condensador de Fluzo",
"precio" : 100000000000,
"reviews" : [
{
"usuario" : "emmett",
"comentario" : "¡Genial!",
"calificacion" : 5
},{
"usuario" : "marty" ,
"comentario" : "¡Justo lo que necesitaba!",
"calificacion" : 4
} ]
} Curso Especialización IA y Big Data 40
CONDICIONES OBJETOS ANIDADOS
Para acceder al usuario de una revisión usamos la propiedad de anidado (.)

Por ejemplo, para averiguar los productos que cuestan más de 10.000 y que tienen una
calificación igual a 5 o superior haríamos:

> db.catalogo.find({"precio":{$gt:10000},
"reviews.calificacion":{$gte:5}}
)

Curso Especialización IA y Big Data 41


CONDICIONES COMPUESTAS Y/O
Para usar la conjunción o la disyunción, tenemos los operadores $and y $or. Son
operadores prefijo, de modo que se ponen antes de las subconsultas que se van a evaluar.

Estos operadores trabajan con arrays, donde cada uno de los elementos es un documento
con la condición a evaluar, de modo que se realiza la unión entre estas condiciones,
aplicando la lógica asociada a AND y a OR.

> db.books.find({ $or:[ {lang:"en"}, {price:{$gte:10}} ]})


> db.books.find({ $or:[ {price:{$lt:50}}, {price:{$gt:10}} ]})

Realmente el operador $and no se suele usar porque podemos anidar en la consulta 2


criterios, al poner uno dentro del otro.

Curso Especialización IA y Big Data 42


CONDICIONES COMPUESTAS Y/O

Finalmente, si queremos indicar mediante un array los diferentes valores que puede cumplir
un campo, podemos utilizar el operador $in:

> db.books.find({ lang:{$in:["en","es"]}})

Por supuesto, también existe su negación mediante $nin.

Curso Especialización IA y Big Data 43


CONSULTAS SOBRE ARRAYS
Si trabajamos con arrays, vamos a poder consultar el contenido de una posición del mismo
tal como si fuera un campo normal.
Si queremos filtrar teniendo en cuenta el número de ocurrencias del array, podemos utilizar:
● $all para filtrar ocurrencias que tienen todos los valores del array.
● $in, igual que SQL, para obtener las ocurrencias que cumple con alguno de los valores
pasados (similar a usar $or sobre un conjunto de valores de un mismo campo). Si
queremos su negación, usaremos $nin.

Curso Especialización IA y Big Data 44


CONSULTAS SOBRE ARRAYS
Finalmente, a la hora de proyectar los datos, si no estamos interesados en todos los valores
de un campo que es un array, podemos restringir el resultado mediante el operador $slice:

Así pues, si quisiéramos obtener las personas que tienen más de un hijo, y que de esas
personas, en vez de mostrar todos sus hobbies, mostrase los dos primeros, haríamos:

> db.people.find( {hijos: {$gt:1}}, {hobbies: {$slice:2}} )

Curso Especialización IA y Big Data 45


CONJUNTOS DE VALORES
Igual que en SQL, a partir de un colección, si queremos obtener todos los diferentes valores
que existen en un campo, utilizaremos el método distinct

> db.grades.distinct('type')
[ "exam", "quiz", "homework" ]

Si queremos filtrar los datos sobre los que se obtienen los valores, le pasaremos un
segundo parámetro con el criterio a aplicar:

> db.grades.distinct('type', { score: { $gt: 99.9 } } )


[ "exam" ]

Curso Especialización IA y Big Data 46


CURSORES
Al hacer una consulta, se devuelve un cursor. Sobre el cursor podemos utilizar las
siguientes funciones:
● cur.hasNext() true/false para saber si quedan elementos
● cur.next() Pasa al siguiente documento
● cur.limit(numElementos) Restringe el número de resultados a numElementos
● cur.sort({campo:1}) Ordena los datos por campo 1 ascendente o -1 o descendente
● cur.skip(numElementos) Permite saltar numElementos con el cursor

Curso Especialización IA y Big Data 47


CURSORES
Una consulta con find, realmente se devuelve un cursor, un uso muy habitual es encadenar
una operación de find con sort y/o limit para ordenar el resultado por uno o más campos y
posteriormente limitar el número de documentos a devolver.

Estos son un par de ejemplos:

> db.grades.find({ type:'homework'}).sort({score:-1}).limit(1)


> db.grades.find().sort({score:-1}).limit(10).skip(20);

Curso Especialización IA y Big Data 48


CONTANDO DOCUMENTOS
Para contar el número de documentos, en vez de find usaremos el método count. Por
ejemplo:

> db.grades.count({type:"exam"})
> db.grades.find({type:"exam"}).count()
> db.grades.count({type:"essay", score:{$gt:90}})

También se puede utilizar count como método de un cursor.

Curso Especialización IA y Big Data 49


AGREGACIONES
Para poder agrupar datos y realizar cálculos sobre éstos, MongoDB ofrece diferentes
alternativas:

● Mediante operaciones Map-reduce con operación mapreduce()


● Mediante operaciones de agrupación sencilla, como pueden ser las operaciones
count(), distinct() o group().

Curso Especialización IA y Big Data 50


AGREGACIONES
La sintaxis completa es.

group({ key, reduce, initial })

donde sus parámetros definen:

● key: atributo por el que se van a agrupar los datos


● initial: define un valor base para cada grupo de resultados. Normalmente se inicializa
● reduce: función que agrupa los elementos similar. Recibe dos parámetros, el
documento actual (item) sobre el cual se itera, y el objeto contador agregado (prev).

Curso Especialización IA y Big Data 51


AGREGACIONES
Ejemplo: Cuántas personas tienen diferente cantidad de hijos y cuántos hay de cada tipo

> db.people.group( {
key: { hijos: true },
reduce: function ( item, prev ) {
prev.total += 1;
},
initial: { total : 0 }
} )

Curso Especialización IA y Big Data 52


PIPELINE DE AGREGACIONES
Las agregaciones usan un pipeline, conocido como Aggregation Pipeline, de ahí el uso de
un array con [ ] donde cada elemento es una fase del pipeline, de modo que la salida de una
fase es la entrada de la siguiente:

db.coleccion.aggregate([op1, op2, ... opN])

En la siguiente imagen se resumen los pasos de una agrupación donde primero se eligen
los elementos que vamos a agrupar mediante $match y posteriormente se agrupan con
$group para hacer $sum sobre el total

Curso Especialización IA y Big Data 53


PIPELINE DE AGREGACIONES

Curso Especialización IA y Big Data 54


OPERADORES DEL PIPELINE

Curso Especialización IA y Big Data 55


OPERADORES DEL PIPELINE
$group
Agrupa los documentos con el propósito de calcular valores agregrados de una colección de
documentos. Cuando referenciemos al valor de un campo lo haremos poniendo entre
comillas un $ delante del nombre del campo.
Ejemplo:

> db.productos.aggregate([{$group:
{
_id: "$fabricante",
total: { $sum:1 }
}
}])

Curso Especialización IA y Big Data 56


OPERADORES DEL PIPELINE
Si lo que queremos es que el valor del identificador contenga un objeto, lo podemos hacer
asociandolo como valor:

> db.productos.aggregate([{$group:
{
_id: { "empresa": "$fabricante" },
total: { $sum:1 }
}
}])

Curso Especialización IA y Big Data 57


OPERADORES DEL PIPELINE
Además del campo _id, la expresión $group puede incluir campos calculados. Estos otros
campos deben utilizar uno de los siguientes acumuladores.
● $addToSet
● $first Por ejemplo, para obtener el montante total de los
productos agrupados por fabricante, haríamos:
● $last
● $max
Agrupación con $sum
● $min > db.productos.aggregate([{
● $avg $group: {
● $push _id: {
● $sum "empresa":"$fabricante"
},
totalPrecio: {$sum:"$precio"}
}
}]) Curso Especialización IA y Big Data 58
OPERADORES DEL PIPELINE
$project
Si queremos realizar una proyección sobre el conjunto de resultados y quedarnos con un
subconjunto de los campos usaremos el operador $project. Como resultado obtendremos el
mismo número de documentos, y en el orden indicado en la proyección.

Curso Especialización IA y Big Data 59


OPERADORES DEL PIPELINE
> db.productos.aggregate([
{$project:
{
_id:0,
'empresa': {$toUpper:"$fabricante"}, (1) 1. Transforma un campo y lo
'detalles': { (2) pasa a mayúsculas
'categoria': "$categoria", 2. Crea un documento anidado
'precio': {"$multiply": ["$precio", 1.1]} (3)3. Incrementa el precio el 10%
}, 4. Renombra el campo
'elemento':'$nombre' (4)
}
}
])

Curso Especialización IA y Big Data 60


OPERADORES DEL PIPELINE
$match
Se utiliza principalmente para filtrar los documentos que pasarán a la siguiente etapa del
pipeline o a la salida final.

Por ejemplo, para seleccionar sólo las tabletas haríamos:

> db.productos.aggregate([{$match:{categoria:"Tablets"}}])

Curso Especialización IA y Big Data 61


OPERADORES DEL PIPELINE
$sort
El operador $sort ordena los documentos recibidos por el campo y el orden indicado por la
expresión indicada al pipeline.

Por ejemplo, para ordenar los productos por precio descendentemente haríamos:

> db.productos.aggregate({$sort:{precio:-1}})

Curso Especialización IA y Big Data 62


OPERADORES DEL PIPELINE
$limit y $skip
El operador $limit únicamente limita el número de documentos que pasan a través del
pipeline. El operador recibe un número como parámetro:

> db.productos.aggregate([{$limit:3}])

Este operador no modifica los documentos, sólo restringe quien pasa a la siguiente fase.

De manera similar, con el operador $skip, saltamos un número determinado de


documentos:

> db.productos.aggregate([{$skip:3}])

Curso Especialización IA y Big Data 63


OPERADORES DEL PIPELINE
$unwind
Este operador es muy interesante y se utiliza solo con operadores array. Al usarlo con un
campo array de tamaño N en un documento, lo transforma en N documentos con el campo
tomando el valor individual de cada uno de los elementos del array.
Ejemplo: Si tenemos
{
"_id" : ObjectId("54f9769212b1897ae84190cf"),
"titulo" : "www.google.es",
"tags" : [
"mapas",
"videos",
"blog",
"calendario",
"email",
"mapas"
] Curso Especialización IA y Big Data 64
}
OPERADORES DEL PIPELINE
Y escribimos

> db.enlaces.aggregate(
{$match:{titulo:"www.google.es"}},
{$unwind:"$tags"})

Obtenemos:
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "mapas" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "videos" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "blog" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "calendario"
}
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "email" }
{ "_id" : ObjectId("54f9769212b1897ae84190cf"), "titulo" : "www.google.es", "tags" : "mapas" }

Curso Especialización IA y Big Data 65


DE SQL AL PIPELINE DE AGREGACIONES
Si relacionamos los comandos SQL con el pipeline de agregaciones tenemos las siguientes
equivalencias:

Curso Especialización IA y Big Data 66


ACTIVIDAD
Carga una colección en la BD por defecto de mongodb (test)

Para importar ficheros existe el comando teclea este comando mongoimport que se teclea
en la terminal

mongoimport --db myBBDD --collection presupuesto --jsonArray --file


presupuesto.json

En nuestro caso

mongoimport --db test --collection books --jsonArray --file books.xml

Curso Especialización IA y Big Data 67


BIBLIOGRAFIA
● http://expertojava.ua.es/experto/restringido/2015-16/nosql/nosql.html#_mongodb
● https://www.tutorialspoint.com/mongodb/mongodb_advanced_indexing.htm
● https://www.guru99.com/mongodb-tutorials.html
● https://www.loginradius.com/blog/async/full-text-search-in-mongodb/

Curso Especialización IA y Big Data 68

También podría gustarte