<div class="page"> <div class="cover text-center"> <img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo"> # MongoDB <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 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ó MongoDB és un sistema de gestió de bases de dades NoSQL popular i de codi obert. Està dissenyat per emmagatzemar dades en un format flexible semblant a JSON anomenat BSON (Binary JSON), facilitant el treball amb dades en aplicacions modernes. MongoDB és conegut per la seva escalabilitat, flexibilitat i rendiment, fet que el fa adequat per a una àmplia gamma d'usos, des de projectes de xicoteta escala fins a aplicacions empresarials de gran envergadura. ::: docs - [Relational vs. Non-Relational Databases](https://www.mongodb.com/resources/compare/relational-vs-non-relational-databases) ::: ### Conceptes Clau - __Base de dades de documents__: MongoDB és una base de dades orientada a documents, és a dir, emmagatzema les dades en documents en lloc de taules. - __Documents__: Un document és una unitat bàsica d'emmagatzematge de dades a MongoDB. L'estructura dels documents és similar a JSON. Cada document és una col·lecció de parells de __claus-valor__, on les claus són cadenes de caràcters i els valors poden ser de diversos tipus de dades. - __Col·leccions__: Les dades s'organitzen en col·leccions a MongoDB. Una col·lecció és un grup de documents similars, que podria ser comparat amb una taula en una base de dades relacional. A diferència de les taules en una base de dades relacionals, els documents d'una col·lecció no han de tindre l'estructura de dades idèntica. ## Instal·lació ::: tip Vos recomane seguir el tutorial [Complete MongoDB Tutorial](https://www.youtube.com/watch?v=ExcRbA7fy_A&list=PL4cUxeGkcC9h77dJ-QJlwGlZlTd4ecZOA) de Net Ninja, on explica pas a pas què és MongoDB, com instal·lar-lo i com utilitzar-lo. - [Complete MongoDB Tutorial #2 - Installing MongoDB](https://www.youtube.com/watch?v=gDOKSgqM-bQ&list=PL4cUxeGkcC9h77dJ-QJlwGlZlTd4ecZOA&index=3) - https://www.youtube.com/watch?v=xhSm4o-lDb4 ::: Per instal·lar MongoDB, seguiu les instruccions de la [pàgina oficial de MongoDB](https://www.mongodb.com/try/download/community). Treballarem amb la versió 7.0.9 de MongoDB. És recomanable instal·lar __MongoDB Compass__, una interfície gràfica d'usuari per a MongoDB que facilita la visualització i l'exploració de les dades a la base de dades. També cal instal·lar __MongoDB Shell__, una eina de línia de comandes per interactuar amb la base de dades MongoDB. - [MongoDB Shell](https://www.mongodb.com/try/download/shell) Per executar l'eina `mongosh`, obriu una terminal (com Powershell) i executeu la comanda `mongosh`. ```shell PS C:\Users\joapuiib> .yellow{mongosh} Current Mongosh Log ID: 662fc527889f41720f46b798 Connecting to: .green{mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.5} Using MongoDB: 7.0.9 .yellow{Using Mongosh}: 2.2.5 For mongosh info see: https://docs.mongodb.com/mongodb-shell/ .yellow{------} .yellow{The server generated these startup warnings when booting} 2024-04-29T16:10:28.259+02:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted .yellow{------} test> ``` ## Comandes Bàsiques Utilitzarem l'eina de línia de comandes `mongosh` per interactuar amb la base de dades MongoDB. A continuació, es mostren algunes comandes bàsiques per començar. ### Bases de dades ::: tip - [Complete MongoDB Tutorial #5 - Using the MongoDB Shell](https://www.youtube.com/watch?v=jR49YGYXdxc&list=PL4cUxeGkcC9h77dJ-QJlwGlZlTd4ecZOA&index=5) ::: MongoDB utilitza la comanda `use` per crear o utilitzar una base de dades. Si la base de dades no existeix, MongoDB la crearà automàticament. ::: info Quan s'utilitza la comanda `use`, MongoDB no crea la base de dades fins que s'afegisquen dades a la base de dades. ::: ```mongodb use nom_base_de_dades ``` ::: example Creem la base de dades `llibres`: ```mongodb database> use llibres switched to db llibres llibres> ``` ::: Per mostrar les bases de dades existents, utilitzeu la comanda `show dbs`. ```mongodb show dbs ``` Per mostrar la base de dades actual, utilitzeu la comanda `db`. ```mongodb db ``` ### Col·leccions Una __col·lecció__ és un grup de documents similars. A continuació, es mostren algunes comandes bàsiques per treballar amb col·leccions: Per crear una col·lecció, utilitzeu la comanda `db.createCollection()` amb el nom de la col·lecció com a argument. ```mongodb db.createCollection('nom_colleccio') ``` ::: success "Bona pràctica" Així com a SQL la convenció de nomenclatura és utilitzar el singular per al nom de les taules, en MongoDB es considera una bona pràctica utilitzar el __plural__ per al nom de la col·lecció. ::: ::: example Creem la col·lecció `autors`: ```mongodb llibres> db.createCollection('autors') { "ok" : 1 } ``` ::: Per mostrar les col·leccions existents, utilitzeu la comanda `show collections`. ```mongodb show collections ``` Per eliminar una col·lecció, utilitzeu la comanda `db.collection.drop()` amb el nom de la col·lecció com a argument. ::: danger Aquesta comanda eliminarà la col·lecció i tots els documents que conté. ::: ```mongodb db.collection.drop() ``` ### Documents Un __document__ és una unitat bàsica d'emmagatzematge de dades a MongoDB. Les dades s'emmagatzemen en documents en format BSON (Binary JSON) i s'estructuren en parells de __clau-valor__. #### Inserció Per insertar un document a una col·lecció, utilitzeu la comanda `db.collection.insertOne()` amb les dades del document com a argument. ```mongodb db.collection.insertOne({ key1: value1, key2: value2, ... }) ``` ::: example Afegim un document a la col·lecció `autors`: ```mongodb llibres> db.autor.insertOne({ "_id": 0, "nom": "Irene Solà", "data_naixement": new Date("1990-09-16"), "nacionalitat": "Espanyola", "biografia": "Irene Solà (Malla, 1990) és escriptora i traductora...", "llibres": [] }) { "acknowledged" : true, "insertedId" : 0 } ``` ::: Tots els documents de MongoDB tenen un camp `_id` que actua com a identificador únic per al document dins de la col·lecció. Si no s'especifica un `_id`, MongoDB crearà un identificador únic per al document. Si voleu inserir més d'un document a la vegada, utilitzeu la comanda `db.collection.insertMany()` amb una llista de documents com a argument. ```mongodb db.collection.insertMany([ { key1: value1, key2: value2, ... }, { key1: value1, key2: value2, ... }, ... ]) ``` #### Consulta Per consultar els documents d'una col·lecció, utilitzeu la comanda `db.collection.find()`. ```mongodb > db.collection.find() ``` ::: example Consultem els documents de la col·lecció `autors`: ```mongodb llibres> db.autors.find() [ { _id: 0, nom: 'Irene Solà', data_naixement: ISODate('1990-09-16T00:00:00.000Z'), nacionalitat: 'Espanyola', biografia: 'Irene Solà (Malla, 1990) és escriptora i traductora...', llibres: [] } ] ``` ::: ## Recursos addicionals - [Pàgina oficial de MongoDB](https://www.mongodb.com/) - [Complete MongoDB Tutorial](https://www.youtube.com/watch?v=ExcRbA7fy_A&list=PL4cUxeGkcC9h77dJ-QJlwGlZlTd4ecZOA) de Net Ninja - [MongoDB per Luís García Bonifaz](https://luisgarciabonifaz.github.io/BDA/Tema04/MongoDB/) - [MongoDB per Aitor Medrano](https://aitor-medrano.github.io/iabd2223/sa/02mongo.html)