2. Bases de dades NoSQL

2.4. Començar a treballar amb el SGBD MongoDB

A la màquina virtual proporcionada per la UOC tenim instal·lat un SGBD MongoDB.

Per connectar-nos al servidor de MongoDB obrim un terminal, hi escrivim mongosh i ens sortirà el cursor >

student@ubuntuM0151:~$ mongosh
Current Mongosh Log ID: 66f3c526cf082f27c4964032
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.3.1
Using MongoDB: 7.0.14
Using Mongosh: 2.3.1

For mongosh info see: https://www.mongodb.com/docs/mongosh-shell/

-------
    The server generated these startup warnings when booting
    2024-09-25T10:08:11.986+02:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
    2024-09-25T10:08:17.269+02:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
-------

Ja estem connectats al servidor amb el client de la línia d’ordres i ja podrem escriure les ordres i sentències per interactuar amb el servidor de MongoDB.

Per visualitzar les bases de dades creades:

show dbs

> show dbs
admin    0.000GB
config   0.000GB
local    0.000GB

Com que encara no hem creat cap base de dades, només ens mostra les bases de dades del sistema.

Per crear una nova base de dades buida fem servir l’ordre use.

Vam crear la base de dades uoc.

use uoc

L’ordre use serveix tant per crear una base de dades nova com per connectar-se a una base de dades existent. L’ordre intenta connectar-se a una base de dades existent i si no existeix la crea.

Aquesta és una característica general de MongoDB, és molt flexible i dona pocs errors. En altres sistemes de gestió de bases de dades com MySQL, en intentar connectar amb una base de dades inexistent saltaria un error. A MongoDB no salta error i es crea la nova base de dades. En realitat, no la crea, guarda espai per crear-hi col·leccions de documents. Si creem una nova base de dades amb l’ordre use i no creem col·leccions en ella, no queda emmagatzemada.

Veiem en aquesta seqüència d’ordres com consultem les bases de dades existents en el sistema amb show dbs, creem la base de dades uoc amb use uoc, i com quan tornem a consultar les bases de dades amb show dbs no apareix la base de dades uoc.

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

> use uoc
switched to db uoc

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
Perquè la nova base de dades quedi guardada al sistema cal que tingui col·leccions de documents.

Ara crearem una nova col·lecció buida a la base de dades uoc utilitzant la instrucció createCollection().

> use uoc
switched to db uoc
> db.createCollection(chr1);
uncaught exception: ReferenceError: chr1 is not defined :
@(shell):1:1
> db.createCollection("chr1");
{ "ok" : 1 }
> show dbs
admin  0.000GB
config 0.000GB
local  0.000GB
uoc    0.000GB
>

Tornem a connectar-nos a la base de dades uoc amb use uoc i creem la col·lecció de documents buida anomenada chr1.

Si us hi fixeu, primer executem la instrucció o funció db.createCollection(chr1); però dona error perquè el paràmetre que espera la funció no està entre cometes simples: “chr1”.

En escriure el paràmetre entre cometes simples db.createCollection("chr1"); la nova col·lecció anomenada chr1 es crea correctament a la base de dades uoc, que ja no està buida, i en executar show dbs ja ens mostra la base de dades uoc.

Analitzarem la instrucció db.createCollection(“chr1”); i ens servirà per entendre com funcionen les instriccions a MongoDB. Com que ja som a la base de dades uoc, amb la part de la instrucció db..... es refereix a la base de dades que estem fent servir, i a continuació la instrucció createCollection() que en realitat és una funció que pot fer servir paràmetres entre parèntesis.

Com ja veurem, la majoria d’instruccions són funcions que poden fer servir o no paràmetres. Si la instrucció no necessita paràmetres deixarem els parèntesis buits ().

Anem a veure algunes ordres útils de MongoDB:

  • db.help() Mostra l’ayuda per als mètodes de la base de dades.
  • db.<collection>.help() Mostra l’ajuda per als mètodes de la col·lecció. La <collection> pot ser el nom d’una col·lecció ja creada o encara no creada.
  • Show db Mostra la llista de totes les bases de dades del sistema.
  • use db Canvia la base de dades actual a la base de dades.
  • show collections Mostra la llista de totes les col·leccions de la base de dades actual.
  • show users Mostra la llista de tots els usuaris de la base de dades actual.
  • show databases Nou a partir de la versió 2.4. Mostra la llista de totes les bases de dades disponibles.
  • db.<collection>.find() Mostra tots els documents de la col·lecció <collection>.
  • db.<collection>.find().pretty() Mostra tots els documents de la col·lecció <collection> en un format JSON més llegible.

Per veure les col·leccions creades a la base de dades fem servir la instrucció següent:

show collections
> show collections
chr1