M101JS – Semana 5

Aggregation

De una colección fuente, se ejecuta una serie de procesos encadenados (pipeline) y construye una serie de documentos.

db.products.aggregate([
   {$group:
      {
          _id:"$manufacturer",
          num_products:{$sum:1}
      }
   }
])

Pipeline

$proyect -> Selecciona las claves en las que estas interesado.
$match -> hace un filtro.
$group -> agrupa por claves
$sort -> Ordena los documentos
$skip -> Salta ciertos documentos
$limit -> limita el numero de elementos
unwind -> Quita la relación entre los documentos anidados (arrays)

Expresiones que se pueden usar en $group

$sum -> Añades uno cada vez que encuentra clave o añades el valor de la clave
$avg -> calcula el promedio de una clave entodos los documentos
$min -> encuentra el valor minimo
$max -> encuentra el valor maximo
$push y $addToSet -> construyen arrays (addToSet, solo añade cuando el valor es diferente)
$first y $last -> añadiran el primer o ultimo valor, puede no tener sentido si no los ordenamos primero.

Tambien podemos hacer lo que se llama agrupación doble, ej:

db.fun.aggregate([{$group:{_id:{a:"$a", b:"$b"}, c:{$max:"$c"}}}, {$group:{_id:"$_id.a", c:{$min:"$c"}}}])