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
- 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;