Introducción

MongoDB es una base de datos NoSQL escrita en C++, auto-contenida, con pocas dependencias.

Instalación

Es mejor leer la sección Install MongoDB y elegir la edición de mongo que más convenga, probablemente Community Edition.

mongod es el servidor y mongo el cliente de línea de comandos.

mongod --dbpath /data/db

/data/db es el directorio pre-determinado, aquí también se encuentra el archivo mongod.lock que tiene el PID de la instancia de mongod.

Se puede detener la instancia de mongod desde el shell de mongo con el siguiente comando en la base de datos admin. Este comando solo funciona en un shell del host donde vive el proceso mongod.

use admin
db.shutdownServer()
mongo --host <hostname> --port 27017

Configuración

Como mínimo es necesario indicar la ruta para el directorio de datos y la ruta completa para el archivo de log.

El motor de datos puede ser mmapv1 o wiredTiger, a partir de la versión 3 de mongod el motor pre-determinado es mmapv1. No es posible cambiar motores una vez que se ha creado una base de datos, mongod se rehusa a iniciar si detecta archivos de otro motor en el directorio de datos.

También pre-determinado journaling está habilitado, esto significa que mongod espera una notificación que los datos han sido escritos en disco.

Se pueden separar las bases de datos en un directorio para cada una.

mongod escucha solo en localhost en el puerto 27017 por default.

Si se habilita, mongod provee una página html con el estado de la instancia en http://127.0.0.1:28017/

# mongod.conf
storage:
    dbPath: "/data/db"
    journal:
        enabled: true
    engine: mmapv1
    mmapv1:
        journal:
            commitIntervalMs: 144
    directoryPerDB: true

net:
    bindPort: 127.0.0.1[,x.x.x.x]
    port: 27017
    http:
        enabled: true

systemLog:
    destination: file|syslog
    path: "/data/log/mongod.log"
    logAppend: false|true
    # Linux only, add next line
    logRotate: rename|reopen

 engine: mmapv1|wiredTiger|

Para obtener información de la instancia y su configuración:

 db.serverStatus()
 db.serverStatus().dur
  • Conexión con mongo shell con docker.
docker run -it [-v $(pwd)/data:/shared] mongo \
mongo "mongodb+srv://cluster0-cmddy.mongodb.net/test" \
--username <admin>
  • Conexión con Compass.

mongodb+srv://<admin>:<password>@cluster0-cmddy.mongodb.net/test

  • Conexión mongo shell instalado en el sistema.
mongo "mongodb+srv://cluster0-cmddy.mongodb.net/test"  --username
admin

Consultas

db.covid.count();

db.covid.find();

db.covid.findOne({"Province/States": "Beijing"});

db.covid.explain().find({"Province/States": "Beijing"});

db.covid.deleteOne({"Province/States": "Beijing"});

db.covid.count();


db.covid.insertOne({ x: 1});

db.covid.findOne({x: { $lt: 20} } )

db.covid.findOne({x: { $lt: 0} } );

Importar / exportar datos

COVID-19 Reports

  • Importa un archivo CSV.
docker run -it -v $(pwd)/data:/shared mongo \
    mongoimport --collection=covid --type=csv \
    --headerline --file=/shared/covid.csv \
    --uri="mongodb+srv://<user>:<password>@cluster0.mongodb.net/test"

Indices

TODO

Replica sets

TODO

Sharding

TODO

Monitoreo

TODO

Seguridad

Crea un usuario

db.createUser({user: "ellison", pwd: passwordPrompt(),
    roles: [ "readWrite"]});
  • Crear y mostrar base de datos actual.
db

use awesomeappdb;  // Same as CREATE DATABASE

db
  • Crear una Colección

Las operaciones insertOne() y createIndex() crean su colección respectiva si está no existe ya. Asegurate de seguir las restricciones de nombres de MongoDB.

db.movers.insertOne({x: 1});  // Same thing as INSERT INTO movers
(x) VALUES (1);

db.movers.createIndex({y: 1});  // IDX

MongoDB provee el método, db.createCollection() para crear una colección explicitamente con varias opciones como indicar longitud máxima o las reglas de validación del documento.

Una colección no requiere que sus documentos mantengan un esquema uniforme; los documentos de una colección no necesariamente tienen los mismos campos y el tipo de datos puede diferir a través de documentos en una colección.

Sin embargo a partir de MongoDB 3.2, puedes forzar las reglas de valiación para una colección durante las operaciones de update e insert. See Schema Validation for details.

  • Lista las bases de datos en el servidor.
show databases;
  • Lista las colecciones de la base de datos actual.
db.getCollectionNames()

show collections
  • Elimina una colección
db.<collecrtion>.drop();  // Same as DROP TABLE;

Referencias

MongoDB Atlas

mongo shell quick reference