Created
April 14, 2020 10:46
-
-
Save Awes0meM4n/eec7ae783fcf01e4c611d0f051319d59 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
==================================================================================================== | |
/* 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