bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


accedint_mongodb

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
accedint_mongodb [2020/02/12 18:25]
enric_mieza_sanchez [Exercici DB films]
accedint_mongodb [2022/01/26 18:46] (actual)
enrique_mieza_sanchez [Accedint a MongoDB]
Línia 5: Línia 5:
 Aquest article està orientat a la connexió a MongoDB a través de diferents llenguatges de programació. Aquest article està orientat a la connexió a MongoDB a través de diferents llenguatges de programació.
  
-Es recomana utilitzar una versió més avançada de MongoDB que la que hi ha als respositoris d'Ubuntu 16.04 (porta versions 2.x). Si la versió de MongoDB és 2.x o menor, algunes eines com Robomongo o Studio 3T no ens funcionaran bé. A Ubuntu 18.04 hi ha MongoDB > 3.x, cap problema, doncs.+Es recomana utilitzar una versió avançada de MongoDB. Si la versió de MongoDB és 2.x o menor, algunes eines com Robomongo o Studio 3T no ens funcionaran bé. A Ubuntu 18.04 hi ha MongoDB > 3.x, cap problema, doncs (però a Ubuntu 16.04 tenien versions 2.x i no eren viables).
  
 Recursos: Recursos:
Línia 12: Línia 12:
   * https://robomongo.org facilita la gestió i fer proves, tot i que la //shell// de MongoDB és força còmoda ja que utilitza JavaScript com a llenguatge nadiu.   * https://robomongo.org facilita la gestió i fer proves, tot i que la //shell// de MongoDB és força còmoda ja que utilitza JavaScript com a llenguatge nadiu.
   * [[https://www.mongodb.com/cloud/atlas|Mongo Atlas]] és un servei de BD Mongo al núvol que ens permet un cluster gratuït.   * [[https://www.mongodb.com/cloud/atlas|Mongo Atlas]] és un servei de BD Mongo al núvol que ens permet un cluster gratuït.
 +
 +{{mdb-vs-sql.png?direct}}
  
 Importa amb ''mongorestore'' la base de dades de prova {{movies-mongo-dump.rar}}. La utilitat d'importació habitual és ''mongoimport'', però en aquest cas farem servir ''mongorestore'' ja que les dades estan en format binari). Importa amb ''mongorestore'' la base de dades de prova {{movies-mongo-dump.rar}}. La utilitat d'importació habitual és ''mongoimport'', però en aquest cas farem servir ''mongorestore'' ja que les dades estan en format binari).
  
 +{{tag> #FpInfor #Dam #DamMp06 #DamMp06Uf3 #DamMp06Uf03 #Daw #DawMp07 #DawMp07Uf3 #DawMp07Uf03 nodejs mongodb mongo node nosql bbdd }}
 +
 +\\
  
 ===== MongoDB i PHP ===== ===== MongoDB i PHP =====
Línia 69: Línia 74:
  
  
 +
 +
 +\\
  
 ===== MongoDB amb NodeJS ===== ===== MongoDB amb NodeJS =====
Línia 164: Línia 172:
  
 Visita la web amb el browser a (cal abans crear les plantilles ejs descrites més avall) Visita la web amb el browser a (cal abans crear les plantilles ejs descrites més avall)
-  http:localhost:3000+  http://localhost:3000
      
 Prova la API amb la comanda: Prova la API amb la comanda:
Línia 177: Línia 185:
   * ''db.collection().find().toArray()'' ens retorna un array amb les dades extretes. Abans de cridar ''toArray'' hem d'estar segurs que tindrem prou memòria RAM per poder emmagatzemar les dades. Fer una query que retorni molts resultats pot ser perillós ja que podria saturar el servidor.   * ''db.collection().find().toArray()'' ens retorna un array amb les dades extretes. Abans de cridar ''toArray'' hem d'estar segurs que tindrem prou memòria RAM per poder emmagatzemar les dades. Fer una query que retorni molts resultats pot ser perillós ja que podria saturar el servidor.
  
 +
 +==== ObjectID ====
 +De vegades voldrem accedir a diferents elements de la llibreria de MongoDB per a NodeJS. Per exemple, [[https://mongodb.github.io/node-mongodb-native/api-bson-generated/objectid.html|per generar ObjectIDs fes un cop d'ull a aquest codi]].
 +
 +\\
  
  
Línia 182: Línia 195:
 Obriu-vos un compte a [[https://www.mongodb.com/cloud/atlas|MongoDB Atlas]] que us permetrà crear un //cluster// MongoDB gratuït al núvol. Importeu les col·leccions d'exemple per poder fer proves. Obriu-vos un compte a [[https://www.mongodb.com/cloud/atlas|MongoDB Atlas]] que us permetrà crear un //cluster// MongoDB gratuït al núvol. Importeu les col·leccions d'exemple per poder fer proves.
  
-Si busqueu com connectar al vostre //cluster//, us +Si busqueu com connectar al vostre //cluster//, us mostrarà un string del tipus: 
 +  mongodb+srv://pepe:[email protected]/mydb 
 + 
 +... que significa que em puc connectar a l'usuari "pepe" amb password "pepe123" i accedir a la BD "mydb"
 + 
 +Modifiqueu el codi de l'aplicació perquè us connecti a la vostra instància Atlas. Penseu que no podeu crear un codi que contingui usuaris i contrasenyes i pujar-ho al sistema de control de versions (GitHub), ja que l'exposaríeu a altres usuaris i us hackejarien la base de dades fàcilment. Així, una bona pràctica de control de versions és posar el usuari i //password// del nostre cluster a les variables d'entorn, i al codi capturar-ho amb ''process.env.MYVAR'': 
 + 
 +Abans d'engegar l'aplicació haureu de ajustar les variables d'entorn amb 
 +  $ export DBUSER=admin 
 +  $ export DBPASS=P@ssw0rd 
 +  $ node app.js
  
 <sxh javascript> <sxh javascript>
Línia 188: Línia 211:
 var mongo = require('mongodb').MongoClient; var mongo = require('mongodb').MongoClient;
 var mongoClient; var mongoClient;
 +// consts
 +const PORT = process.env.PORT || 5000
 +const user = encodeURIComponent( process.env.DBUSER );
 +const pass = encodeURIComponent( process.env.DBPASS );
 var dbConStr = "mongodb+srv://"+user+":"+pass+"@cluster0-metgf.mongodb.net/grades"; var dbConStr = "mongodb+srv://"+user+":"+pass+"@cluster0-metgf.mongodb.net/grades";
 mongo.connect( dbConStr, function( err, _client ) { mongo.connect( dbConStr, function( err, _client ) {
Línia 200: Línia 227:
 </sxh> </sxh>
  
 +==== Contrasenyes segures ====
 +Aquest codi anterior captura les variables DBUSER i DBPASS de l'entorn de la //shell//, la qual cosa va bé, però resulta una mica incòmode ajustar les variables cada cop que engeguem la màquina. Per estalviar-nos aquest pas, podem posar les variable a l'arxiu ''.env'', però **afegint ''.env'' al ''.gitignore'' per evitar que pugem aquest arxiu amb contasenyes al repositori de codi**.
 +
 +Utilitza el [[https://www.npmjs.com/package/dotenv|paquet dotenv de npm]] per carregar les variables d'entorn de l'arxiu ''.env''. Tindrem un arxiu '.env' com ara:
 +  DBUSER=user
 +  DBPASS=P@ssw0rd
 +
 +I podem carregar-lo tal i com diu la documentació, amb:
 +<sxh javascript>
 +require('dotenv').config()
 +</sxh>
 +
 +\\
  
 ===== Exercici DB films ===== ===== Exercici DB films =====
  
 +<WRAP todo>
 Importa amb ''mongorestore'' la base de dades de prova {{movies-mongo-dump.rar}}. Importa amb ''mongorestore'' la base de dades de prova {{movies-mongo-dump.rar}}.
- 
  
 Crea una web amb la base de dades de films que implementi: Crea una web amb la base de dades de films que implementi:
Línia 217: Línia 257:
   - Filtrar que només es pugui valorar un cop amb el ID del cookie de sessió (quan canvia de IDsession es pot tornar a votar).   - Filtrar que només es pugui valorar un cop amb el ID del cookie de sessió (quan canvia de IDsession es pot tornar a votar).
  
 +</WRAP>
 +
 +\\
  
accedint_mongodb.1581531924.txt.gz · Darrera modificació: 2020/02/12 18:25 per enric_mieza_sanchez