<div class="page"> <div class="cover text-center"> <img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo"> # Base de dades Municipis <div class="text-end fit-content ms-auto my-3 mt-auto pt-3"> <p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p> <p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p> <p><strong>Curs:</strong> 2023/2024</p> </div> <div> <p>Aquest material és una obra derivada a partir del material de: <strong>Luís García Bonifaz</strong></p> <p class="fw-bold mb-0">Llicència: BY-NC-SA</p> <p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p> <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank"> <img class="mx-auto" src="/itb/images/license.png" alt="Licence"/> </a> </div><!--license--> </div><!--cover--> </div><!--page--> {:toc} ## Introducció El següent exemple mostra l'estructura d'una base de dades MongoDB on s'emmagatzemen les dades dels municips de l'estat espanyol. ## Base de dades La base de dades `municipis` conté les següents col·leccions: - `municipis`: Conté la informació dels municipis. __Fitxers:__ - <a href="/DAM-BD/files/ca/municipis/mongodb/municipis.json" download="municipis.json">municipis.json</a> ::: example "Estructura d'un municipi ```mongodb [ { _id: ObjectId('663a2f6d638ab1b329ca86f7'), comunitat: 'Comunitat Valenciana', provincia: 'València', poblacio: 'Mislata', localitzacio: [ 39.47624, -0.419307 ], altitud: 33.95, habitants: 43756, homens: 21475, dones: 22281, zip: [ '46920' ] } ] ``` ::: ## Consultes 1. Consulta la informació del municipi __Mislata__. ```mongodb [ { _id: ObjectId('663a2f6d638ab1b329ca86f7'), comunitat: 'Comunitat Valenciana', provincia: 'València', poblacio: 'Mislata', localitzacio: [ 39.47624, -0.419307 ], altitud: 33.95, habitants: 43756, homens: 21475, dones: 22281, zip: [ '46920' ] } ] ``` ??? solution ```mongodb db.municipis.find({poblacio: 'Mislata'}) ``` ??? 2. Compta el nombre de municipis de la base de dades. ```mongodb 8112 ``` ??? solution ```mongodb db.municipis.count() db.municipis.find().count() ``` ??? 3. Inserta el municipi fictici __Gotham City__ amb els següents valors: - Comunitat: __Gotham__ - Provincia: __Gotham__ - Població: __Gotham City__ - Localització: __40.712776, -74.005974__ - Altitud: __0__ - Habitants: __1000000__ - Homes: __500000__ - Dones: __500000__ - Codi postal: __10007__ ??? solution ```mongodb db.municipis.insertOne({ comunitat: 'Gotham', provincia: 'Gotham', poblacio: 'Gotham City', localitzacio: [ 40.712776, -74.005974 ], altitud: 0, habitants: 1000000, homens: 500000, dones: 500000, zip: [ '10007' ] }) ``` ??? 4. Actualitza la població __Mislata__ per incrementar en 1 el nombre de dones que hi habiten. També cal actualitzar el nombre d'habitants. ```mongodb [ { _id: ObjectId('663a2f6d638ab1b329ca86f7'), comunitat: 'Comunitat Valenciana', provincia: 'València', poblacio: 'Mislata', localitzacio: [ 39.47624, -0.419307 ], altitud: 33.95, habitants: 43757, homens: 21475, dones: 22282, zip: [ '46920' ] } ] ``` ??? solution ```mongodb db.municipis.updateOne( {poblacio: 'Mislata'}, {$inc: {dones: 1, habitants: 1}} ) ``` ??? 5. Elimina el municipi __Gotham City__. ??? solution ```mongodb db.municipis.deleteOne({poblacio: 'Gotham City'}) ``` ??? 6. Obté els 3 primers municipis de la província d'__Alacant__ ordenats alfabèticament. Mostra sols el nom del municipi. ```mongodb [ { poblacio: 'Adsubia' }, { poblacio: 'Agost' }, { poblacio: 'Agres' } ] ``` ??? solution ```mongodb db.municipis.find( {provincia: 'Alacant'}, {poblacio: 1, _id: 0} ).sort({poblacio: 1}).limit(3) ``` ??? 7. Obté el nom dels municipis que tenen més de 500.000 habitants. Ordena'ls per nombre d'habitants descendentment. ```mongodb [ { poblacio: 'Madrid', habitants: 3255944 }, { poblacio: 'Barcelona', habitants: 1621537 }, { poblacio: 'València', habitants: 814208 }, { poblacio: 'Sevilla', habitants: 703206 }, { poblacio: 'Zaragoza', habitants: 674317 }, { poblacio: 'Málaga', habitants: 568305 } ] ``` ??? solution ```mongodb db.municipis.find( {habitants: {$gt: 500000}}, {poblacio: 1, _id: 0} ).sort({habitants: -1}) ``` ??? 8. Obté la província, el nombre d'habitants i el nom dels municipis amb menys de 10 habitants. Ordena'ls per nombre d'habitants. ```mongodb [ { provincia: 'Toledo', poblacio: 'Illán de vacas', habitants: 5 }, { provincia: 'Burgos', poblacio: 'Jaramillo quemado', habitants: 7 }, { provincia: 'La Rioja', poblacio: 'Valdemadera', habitants: 9 } ] ``` ??? solution ```mongodb db.municipis.find( {habitants: {$lt: 10}}, {provincia: 1, poblacio: 1, habitants: 1, _id: 0} ).sort({habitants: 1}) ``` ??? 9. Obté el nom de totes les províncies sense duplicats ordenats alfabèticament. ```mongodb [ 'A Coruña', 'Alacant', 'Albacete', 'Almería', 'Astúries', 'Badajoz', 'Barcelona', 'Burgos', 'Cantabria', 'Castelló', 'Ceuta', 'Ciudad Real', 'Cuenca', 'Cáceres', 'Cádiz', 'Córdoba', 'Girona', 'Granada', 'Guadalajara', 'Guipúzcoa', 'Huelva', 'Huesca', 'Illes Balears', 'Jaén', 'La Rioja', 'Las Palmas', 'León', 'Lleida', 'Lugo', 'Madrid', 'Melilla', 'Murcia', 'Málaga', 'Navarra', 'Ourense', 'Palencia', 'Pontevedra', 'Salamanca', 'Santa Cruz de Tenerife', 'Segovia', 'Sevilla', 'Soria', 'Tarragona', 'Teruel', 'Toledo', 'Valladolid', 'València', 'Vizcaya', 'Zamora', 'Zaragoza', 'Álava', 'Ávila' ] ``` ??? solution ```mongodb db.municipis.distinct('provincia').sort() ``` ??? 10. Obté els municipis de la província de __Sevilla__ o de la comunitat autònoma __Castella i Lleó__ el nom dels quals comença per la cadena __Bol__. ```mongodb [ { provincia: 'Sevilla', poblacio: 'Bollullos de la mitación' }, { provincia: 'Valladolid', poblacio: 'Bolaños de campos' } ] ``` ??? solution ```mongodb db.municipis.find( { $or: [ {provincia: 'Sevilla'}, {comunitat: 'Castella i Lleó'} ], poblacio: /^Bol/ }, {provincia: 1, poblacio: 1, _id: 0} ) ```