<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}
)
```