Salta el contingut

2. DDL en NoSQL

En aquest apartat veurem com instal·lar MongoDB i les operacions de definició de dades (DDL): com crear i eliminar bases de dades i col·leccions.

2.1. Instal·lació de MongoDB

2.1.1. Amb Docker

Utilitzarem Docker Compose per comoditat, i per si volem afegir després també la utilitat IGU.

Contingut de l'arxiu docker-compose.yml:

YAML
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: root_pass
    ports:
      - 27017:27017
    volumes:
      - mongodata:/data/db

volumes:
  mongodata:

Ens situem dins del directori que conté el docker-compose.yml i el llancem mitjançant:

Bash
docker-compose up -d

Per accedir des d'un terminal utilitzarem el client de Mongo:

Bash
mongo -u root -p root_pass --authenticationDatabase admin

Versions actuals

En les versions recents de MongoDB, el client mongo ha estat substituït per mongosh:

Bash
mongosh -u root -p root_pass --authenticationDatabase admin

2.1.2. Ubuntu

En Ubuntu podem instal·lar la versió de la comunitat de MongoDB directament des del repositori oficial:

Bash
1
2
3
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl enable --now mongod

Per comprovar que el servei està funcionant:

Bash
sudo systemctl status mongod

I per entrar a la consola:

Bash
mongosh

2.1.3. Windows

A Windows, l'opció més senzilla és descarregar l'instal·lador oficial (.msi) des de la pàgina de MongoDB i seguir l'assistent. L'instal·lador configura MongoDB com un servei de Windows i deixa disponible la consola mongosh des de qualsevol terminal.

2.1.4. Utilitats IGU

Compass

MongoDB Compass és la interfície gràfica oficial de MongoDB. Podem crear la nostra pròpia imatge mitjançant un Dockerfile.

Contingut de l'arxiu Dockerfile:

Docker
FROM ubuntu:20.04

LABEL maintainer="sciscar@ieseljsut.com"
LABEL version="0.1"
LABEL description="Imatge d'una instal·lació de MongoDB Compass"

# deshabilitem el prompt mentre instal·lem
ARG DEBIAN_FRONTEND=noninteractive

# actualitzem
RUN apt update

# instal·lem l'utilitat
RUN apt install -y wget

# descarreguem l'instal·lador
RUN wget https://downloads.mongodb.com/compass/mongodb-compass_1.26.1_amd64.deb

# instal·lem
RUN apt install -y ./mongodb-compass_1.26.1_amd64.deb

# llancem
CMD mongodb-compass --no-sandbox

Ens situem al directori on està el Dockerfile i construïm la imatge:

Bash
sudo docker build -t "mongocompass" .

Llancem un contenidor amb IGU partint de la imatge anterior:

Bash
1
2
3
sudo docker run --security-opt apparmor:unconfined \
  --name compa --net=host --env="DISPLAY" \
  --volume="$HOME/.Xauthority:/root/.Xauthority:rw" mongocompass

Atenció

Falta afegir a l'ordre anterior un volum enllaçat per poder passar els arxius a importar.

Robo 3T

Robo 3T és un client gràfic alternatiu per a MongoDB. Escrivim el següent Dockerfile:

Docker
FROM ubuntu:18.04

MAINTAINER giovanni.colapinto@gmail.com

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
 && apt-get install -y --no-install-recommends --fix-missing \
    libgl-dev \
    qt5dxcb-plugin \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/

ADD https://download-test.robomongo.org/linux/robo3t-1.3.1-linux-x86_64-7419c406.tar.gz /opt/robo3t.tar.gz

RUN cd /opt/ \
 && mkdir robo3t \
 && tar -C /opt/robo3t --strip-components 1 -xzf robo3t.tar.gz && rm robo3t.tar.gz \
 && ls /opt/robo3t

VOLUME /root/.3T
VOLUME /root/.config/3T

CMD /opt/robo3t/bin/robo3t

Construïm la imatge:

Bash
sudo docker build -t "robo3t" .

Llancem:

Bash
1
2
3
4
sudo docker run --security-opt apparmor:unconfined --net=host \
  --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
  -v "$HOME/data/robo3t/3T:/root/.3T" \
  -v "$HOME/data/robo3t/config:/root/.config/3T" robo3t

2.2. Primers comandaments

Primers comandaments que podem provar:

  • show dbs / show databases: mostra totes les bases de dades que tenim a Mongo.

    show dbs

  • use <basededades>: accedeix a una base de dades.

    use

  • show collections: mostra les col·leccions que tenim a una BD.

    show collections

  • db.stats(): ens dona els detalls i estadístiques generals de la base de dades.

    db.stats()

  • db.help(): proporciona ajuda dels comandaments de Mongo.

  • db: indica la base de dades actual.

2.3. Crear una base de dades

No hi ha cap mètode específic per crear una base de dades: en el moment que creem una col·lecció, automàticament es crea la base de dades.

  1. Primer accedim a la base de dades nova (encara que no existisca):

    Accés a una base de dades nova

  2. Una vegada dins, hem de crear una col·lecció.

Atenció

Amb use encara no s'ha creat res: si no creem la col·lecció, la base de dades no s'haurà creat.

2.4. Crear una col·lecció

Tenim dues opcions per crear les col·leccions:

Opcions per crear col·leccions

db.createCollection(<nomColeccio>, [opcions]) ens permet crear una col·lecció utilitzant les distintes opcions de configuració. Aquesta opció és interessant quan el projecte està clar, definit i estan clares les limitacions que li posarem.

createCollection

db.<nomColeccio>.insert(<JSON>): li diem a Mongo que faça una inserció en la col·lecció i, si Mongo detecta que no existeix, la crea. Aquesta és l'opció més habitual quan comencem i encara no tenim clares les limitacions que li donarem a la col·lecció.

Inserció que crea la col·lecció

2.5. Eliminar col·leccions i bases de dades

  • db.<nomColeccio>.drop(): elimina la col·lecció i retorna true o false segons si s'ha eliminat correctament o ha ocorregut algun problema.
  • db.dropDatabase(): elimina la base de dades en la qual estem.

Atenció

Aquestes operacions no es poden desfer. Abans d'eliminar una col·lecció o una base de dades, assegura't que ja no necessites les dades.