Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Awes0meM4n/eec7ae783fcf01e4c611d0f051319d59 to your computer and use it in GitHub Desktop.
Save Awes0meM4n/eec7ae783fcf01e4c611d0f051319d59 to your computer and use it in GitHub Desktop.
====================================================================================================
/* PARTE I */
/* 1. Obtener tres provincias al azar */
db.provincias.aggregate([{$sample:{size:3}}])
/* 2. Obtener 5 provincias de Andalucía */
db.provincias.aggregate([{$match:{CA:"Andalucía"}},
{$sample:{size:5}}
])
/* 3. Obtener el nombre (que será el identificador) y superficie de 3 ciudades de Andalucía*/
db.provincias.aggregate([{$match:{CA:"Andalucía"}},
{$sample:{size:3}},
{$project:{_id:"$Nombre", Superficie:1}}
])
/* 4. Obtener el nombre (identificador) y superficie de 5 ciudades de Andalucía al azar ordenadas por superficie*/
db.provincias.aggregate([{$match:{CA:"Andalucía"}},
{$sample:{size:5}},
{$project:{_id:"$Nombre", Superficie:1}},
{$sort:{Superficie:1}}
])
/* 5. Obtener una nueva colección provinciasCLM que contenga documentos con el nombre y la superficie de las provincias de Castilla-La Mancha.*/
db.provincias.aggregate([{$match:{CA:"Castilla-La Mancha"}},
{$project:{Nombre:1,Superficie:1,_id:0}},
{$out:"provinciasCLM"}])
====================================================================================================
/* PARTE II: GROUP y UNWIND */
/* 6. Obtener la superficie y número de provincias total.*/
-- _id:null (o cualquier otro valor) indica que se agrupen todos los documentos de la colección
db.provincias.aggregate([{$group:{"_id":null,
"totalProv":{$sum:1},
"totalSup":{$sum:"$Superficie"}}}])
/* 7. Obtener una nueva colección CAconProvincias con un documento por cada Comunidad, que contenga el número de provincias, el total de superficie y un array con las provincias*/
db.provincias.aggregate([ {"$group" : { "_id": "$CA",
"numProvincias":{$sum:1},
"totSuperficie":{$sum:"$Superficie"},
"provincias":{$push:"$Nombre"} }},
{$out:"CAconProvincias"} ])
/* 8. Obtener una colección con un documento por provincia que contenga la población del último año guardado (sin asumir que es el 2015).*/
db.provincias.aggregate(
[{$unwind: "$Datos"},
{$sort:{"Datos.Anyo":1}},
{$group:{_id:"$Nombre",
"Poblacion":{$last:"$Datos.Valor"},
"Anyo":{$last:"$Datos.Anyo"}}}
])
/* 9. Obtener el año con mayor población en España. */
db.provincias.aggregate(
[{$unwind: "$Datos"},
{$group: {
"_id": "$Datos.Anyo",
"totalPob":{$sum: "$Datos.Valor"}
}},
{$sort: {"totalPob":-1}},
{$limit:1}
])
/* 10. Obtener un documento por provincia, con la población del primer año almacenado, el último y la diferencia ($substract). */
db.provincias.aggregate(
[{$unwind: "$Datos"},
{$sort: {"Datos.Anyo":1}},
{$group: {
"_id": "$Nombre",
"pob1971":{"$first":"$Datos.Valor"},
"pob2015":{"$last":"$Datos.Valor"}
}},
{$project:
{"_id":0,
"nombre":"$_id",
"cambio":{"$subtract": ["$pob2015","$pob1971"]},
"pob1971":1,
"pob2015":1}}
])
/* 11. Obtener la comunidad autónoma que menos ha aumentado su densidad de población (o que más lo ha disminuido). */
db.provincias.aggregate
([
{$unwind : "$Datos"},
{$sort : {"Datos.Anyo" : 1}},
{$group : {"_id" : "$Nombre",
"pob1971" : {"$first" : "$Datos.Valor"},
"pob2015" : {"$last" : "$Datos.Valor"},
"area" : {"$first" : "$Superficie"},
"CA" : {"$first" : "$CA"}}},
{$group : {"_id" : "$CA",
"totalPob1971" : {"$sum" : "$pob1971"},
"totalPob2015" : {"$sum" : "$pob2015"},
"totalArea" : {"$sum" : "$area"}}},
{$project : {"_id" : 0,
"CA" : "$_id",
"densidad1971" : {"$divide" : ["$totalPob1971", "$totalArea"]},
"densidad2015" : {"$divide" : ["$totalPob2015", "$totalArea"]},
"denCambio" : {"$subtract" : [
{"$divide" : ["$totalPob2015", "$totalArea"]},
{"$divide" : ["$totalPob1971", "$totalArea"]}]},
"totalArea" : 1,
"totalPob1971" : 1,
"totalPob2015" : 1}},
{$sort : {"denCambio" : 1}},
{$limit : 1}
])
====================================================================================================
/* PARTE III */
/* 12. Obtener el número de provincias de cada comunidad autónoma usando sortByCount.*/
db.provincias.aggregate([{$sortByCount:"$CA"}])
/* 13. Obtener las provincias incluyendo un campo que contenga el nombre de la provincia y el de la CA ($concat). */
db.provincias.aggregate([{$project:{_id:"$Nombre",CA:1,Superficie:1}},
{$addFields:{nombreCompleto:{$concat:["$_id",", ","$CA"]}}}])
/* 14. Modificar la consulta anterior para que en el caso de las Ciudades Autónomas (sin Comunidad Autónoma) no salga null. */
db.provincias.aggregate([{$project:{_id:"$Nombre",CA:1,Superficie:1}},
{$addFields:{nombreCompleto: {$concat:["$_id",", ",{ $ifNull: [ "$CA", "Ciudad Autónoma" ] }]}}},
{$sort:{Superficie:1}}])
/* 15. Obtener el número total de provincias utilizando $count.*/
db.provincias.aggregate([{$count:"TotalProvincias"}])db.provincias.aggregate([{$count:"TotalProvincias"}])
/* 16. Realice un lookup entre la colección Comunidades y la colección soloProvincias */
db.provincias.aggregate ([
{$group:{"_id":"$CA",
"numProvincias":{$sum:1}}},
{$out: "Comunidades"}])
db.provincias.aggregate([
{$project:{Nombre:1,CA:1}},
{$out:"soloProvincias"}])
db.Comunidades.aggregate([{$lookup:{from : "soloProvincias",
localField : "_id",
foreignField : "CA",
as : "listaProvincias"}} ])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment