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
Guía de MongoDB
- Resumen de MongoDB: Empezando con MongoDB
- Cómo instalar MongoDB en Ubuntu y Mac
- Creación de una base de datos en MongoDB
- Comandos básicos de MongoDB Shell
- MongoDB Compass: Uso de la interfaz gráfica de Mongo
- Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
- Explicación de los operadores de proyección y proyección de MongoDB
- Explicación de las funciones agregadas de MongoDB
- Ordenación de MongoDB: método y ejemplos de sort()
- Uso de operadores de Push & Pull en MongoDB
- Cómo utiliza MongoDB $unwind
- 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
- Ejemplos de consultas de geolocalización de MongoDB
- Introducción a las transacciones de MongoDB
- Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
- Mejores comandos de MongoDB te necesitas saber
- Replicación de MongoDB: Una introducción completa
- Cómo configurar un clúster de MongoDB
- Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
- MongoDB Atlas: Configuración y uso de MongoDB gestionado
- Cómo ejecutar MongoDB como contenedor Docker
- Uso, gestión y requisitos de memoria de MongoDB
- Cómo utilizar Mongodump para copias de seguridad de MongoDB
- Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
- Cómo utilizar PyMongo
- Cómo utilizar Mongoose para MongoDB y NodeJS
- Chuletas de MongoDB
- MongoDB vs Cassandra: Comparación de bases de datos NoSQL
- PostgreSQL vs MongoDB: Comparando bases de datos
- MySQL vs MongoDB: Comparando bases de datos
- Certificaciones MongoDB: Una introducción
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.