Explicación de las funciones agregadas de MongoDB

Explicación de las funciones agregadas de MongoDB

  • Orquestación
6 min de lectura Actualizado Oct 31, 2017

Puntos clave: Las funciones agregadas de MongoDB Permite análisis complejos de datos similares a SQL, cubriendo funcionalidades esenciales como contar y sumar. Un tutorial ilustra estas funciones con ejemplos, incluyendo el programa WordCount y las técnicas MapReduce.

  • Las funciones agregadas comprenden conteo, suma, promedio, mínimo y máximo.
  • Ejemplos incluyen WordCount y operaciones distintas para el análisis de datos.

Esta es la segunda parte del tutorial sobre cómo utilizar NodeJS con MongoDB. Aquí cambiamos a usar el shell y los comandos habituales de MongoDB para Haz el estudio de funciones agregadas más sencillo.

Para mostrar cómo utiliza agregar funciones, primero explicaremos cómo hacer consultas básicas. Luego mostraremos cómo hacer el programa WordCount, que están con qué Comienza la gente cuando son aprendiendo, por ejemplo, Apache Spark.

Básicamente, son dos funciones agregadas: agregar y MapReduce. Las funciones agregadas son las mismas que el conocido comando SQL:

MapReduce

    SQL select xxx, count (xxx) from table group by xxx

Las funciones agregadas son conteo, suma, promedio, mínimo, máximo, etc.

Los datos que usamos en la primera parte eran la fecha de la encuesta de fumadores. Tiene una estructura compleja. Recuerda que el esquema están este:

    var schema = new mongoose.Schema({
cachedContents : {
largest : String,
non_nill : Number,
nill : Number,
tip : [{
item : String,
count: Number
}] ,
smallest : String,
format : {
displayStyle : String,
align : String
}
}
});

Y los datos de muestra se ven así:

    "_id" : ObjectId("59e9a6144bde260fa07e68f1"),
"cachedContents" : {
"nill" : 0,
"non_nill" : 14069,
"largest" : "WY",
"tip" : [
{
"item" : "NC",
"count" : 20,
"_id" : ObjectId("59e9a6144bde260fa07e6905")
},
{
"item" : "ND",
"count" : 19,
"_id" : ObjectId("59e9a6144bde260fa07e6904")
},
{
"item" : "OH",
"count" : 18,
"_id" : ObjectId("59e9a6144bde260fa07e6903")
},
…. (shortened)…..
{
"item" : "WY",
"count" : 2,
"_id" : ObjectId("59e9a6144bde260fa07e68f3")
},
{
"item" : "IN",
"count" : 1,
"_id" : ObjectId("59e9a6144bde260fa07e68f2")
}
]
},
"__v" : 0
}

Eso es complicado de manejar, ya que tiene una serie de documentos incrustados: tip:[{item, count}]. Así que primero mostraremos cómo consultar estos datos, luego Haz los datos más sencillos para mostrar las funciones agregado y mapreduce.

Consultas simples

Una consulta simple de búsqueda dará resultados a todos los campos. Así:

    db.smokersmodels.find({ "cachedContents.largest" : "2016" }).pretty()
    "_id" : ObjectId("59e9a6144bde260fa07e6fda"),
"cachedContents" : {
"nill" : 0,
"non_nill" : 14069,
"largest" : "2016",
"tip" : [
{
"item" : "2014-2015",
"count" : 20,
"_id" : ObjectId("59e9a6144bde260fa07e6fe5")
},
… (and so forth) ….

Fíjate en que utilizamos pretty() para formatear la salida a JSON y que están más fácil de leer.

También fíjate que ponemos comillas alrededor de los nombres de campos. Si te miras las instrucciones de MongoDB, las dejan desactivadas. Pero eso causa un error de sintaxis cuando utiliza el shell de Mongo. Parece que hay cierta confusión si te miramos stackoverflow. Nosotros son usando MongoDB versión mongodb-linux-x86_64-debian81-3.4.9.

Y utilizamos la notación de puntos como cachedContents.largest para extraer campos anidados en nuestro documento.

Para generar campos específicos, los ponemos después de la consulta y ponemos el número 1 para indicar cuáles imprimir. Fíjate aquí en cómo queda la salida cuando dejamos fuera pretty().

    db.smokersmodels.find({ "cachedContents.largest" : "2016" } , { "cachedContents.largest" : 1 })
    { "_id" : ObjectId("59e9a6144bde260fa07e688c"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e68ad"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e68e5"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e693d"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e69c3"), "cachedContents" : { "largest" : "2016" } }

Agregación simple

Utiliza la operación distinta para hacer una agregación sencilla:

    db.smokersmodels.distinct("cachedContents.largest")
[
"2016",
"WY",
"Wyoming",
"Tobacco Use – Survey Data",
"Cigarette Use (Adults)",
"Smoking Status",
"BRFSS",
"Some Days",
"%",
"Percentage",
"87.9",
"*",
"Data in these cells have been suppressed because of a small sample size",
"14.9",
"85.4",
"90.4",
"39839",
"Overall",
"White",
"All Ages",
"All Grades",
"BEH",
"101BEH"
]

Recuento de palabras

Ahora Haz algunos datos más sencillos para ilustrar cómo hacer el programa WordCount con MongoDB.

Primero, Crea algunos datos:

    db.words.insertMany( [
{ word: "the" },
{ word: "rain" },
{ word: "in" },
{ word: "spain" },
{ word: "spain" }
]);

Lo imprimen para Ve cómo queda:

    db.words.find().pretty()
{ "_id" : ObjectId("59eb051e878eb4d6aca74243"), "word" : "the" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74244"), "word" : "rain" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74245"), "word" : "in" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74246"), "word" : "spain" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74247"), "word" : "spain" }

El truco con el programa WordCount siempre ha sido Haz los pares (clave, valor) (palabra, 1) y luego sumar el número 1:

    db.words.aggregate([ {$group: { _id: "$word", cnt: {$sum: 1} } } ])
    { "_id" : "in", "cnt" : 1 }
{ "_id" : "rain", "cnt" : 1 }
{ "_id" : "spain", "cnt" : 2 }
{ "_id" : "the", "cnt" : 1 }

Como te puede Ve, la palabra españa aparece dos veces.

Hacer esto con mapReduce básicamente hace lo mismo. Primero Creamos pares (clave,valor) (word, 1) usando la función emit. Luego utilizamos la función JavaScript Array.sum para sumar el número 1.

    db.words.mapReduce(
function() { emit(this.word,1); },
    function(key, values) {return Array.sum(values)}, {
query:{},
    } out:"total_matches"
).find()
    { "_id" : "in", "value" : 1 }
{ "_id" : "rain", "value" : 1 }
{ "_id" : "spain", "value" : 2 }
{ "_id" : "the", "value" : 1 }

El resultado están el mismo.

Recursos adicionales

play

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.