MongoDB - tutorial básico - Atlas, Compass
Tutorial, consejos y guía de aprendizaje básico para MongoDB
Qué es mongoDB
Es un sistema de base de datos NoSQL, orientado a documentos y de código abierto. En lugar de guardar los datos en tablas, los guarda en BSON, similar a JSON, haciendo que el acceso sea mucho más rápido. Disponible para Linux, OS X, Windows. Ver más información: mongoDB en wikipedia. Entre los NoSQL están: MongoDB, Cassandra, HBase, Neo4j.
Jerarquía
Un cluster puedes tener de 1 a 3 cluster (de forma gratuita, si no más), cada uno de ellos puede tener x databases, cada uno de ellos varios collectión y a su vez documents.
CLUSTER - DBS - COLLECTIONS - DOCUMENTS
.
SQL vs NOSQL
Una comparativa de terminología usada en SQL frente a NOSQL (con MongoDB y Cassandra)
SQL | MongoDB | Cassandra |
---|---|---|
Table | Collection | Table |
Row | Document | Row |
Column | field | Column |
Primary key | ObjectId | Primary key |
Index | Index | Index |
View | View | Materialized view |
Nested table or object | Embedded document | Map |
Array | Array | List |
Donde aprender MongoDB
En la web oficial university.mongodb.com hay un montón de cursos 100% gratuitos, en inglés subtitulados en castellano. Se entienden muy bien, se hace rápido y te dan titulación oficial. Cada curso tiene un nivel, y hay cursos que son dependientes de otros más básicos.
De todos estos destaco los que más me gustan:
- MongoDB Basics
- MongoDB for Javascript Developers
- MongoDB for Python Developers
- MongoDB for SQL Pros
- Introduction to MongoDB Charts
No te preocupes por su instalación, no necesita, usa atlas, en la nube.
Hacia la nube y más allá - Cloud con MongoDB Atlas
Es un servicio de Base de Datos en la nube, que te permite crear, administrar la BBDD. Esto evita tener que instalar nada, mantener un servidor.
Como todo servicio tiene su coste, pero hay una modalidad gratuita, que es para equipos de aprendizaje y desarrolladores de pequeñas aplicaciones. Dispones de 512mb de almacenamiento, de sobra para cualquier mini proyecto que estés empezando y puedes usar hasta 3 server replica set y lo mejor de todo, sin límite de caducidad, nunca se borrará.
Para acceder al entorno, entrar en mongodb.com/cloud/atlas. Puedes acceder con la cuenta de google.
Para trabajar antes deberás crear:
- 1 organización
- 1 proyecto
- 1 cluster
Importante cuando te pregunta de la lista (whitelist) de direcciones ip, poner Allow Access from Anywhere
.
Añadir usuario y contraseña.
En tu cluster puedes hacer 3 cosas básicamente (pulsando a conectar):
- Interactuar con
shell
: usando una interface de mongodb en javascript. Puedes crear una máquina virtual (de pago), o usar tu propio shell (debes instalarlo en tu pc) - Conectar tu aplicación con tu cluster mediante drivers nativos
- Usar
MongoDB Compass
: explora, modifica y visualiza tu BBDD mediante esta GUI.
Instalación shell
En la instalación de MongoDB server ya viene incluido el shell. Alternativamente puedes descargar separadamente solo el shell desde la web de documentación docs.mongodb.com seguir las instrucciones. Básicamente es:
- Descargar el sistema operativo
- Elegir el paquete, el shell o server. Recomiendo server ya que es el completo para hacer tus pruebas en tu pc.
- para ubuntu, mejor esta guía (sino, no se instala shell): mongodb-interprise-on-ubuntu
- para windows: mongodb-interprise-on-windows
- Una vez instalado lanza servicio mongo:
sudo systemctl start mongod
- Ver el estado servicio
sudo systemctl status mongod
- Inicio automático en cada arranque
sudo systemctl enable mongod
Conectarnos a shell
En cluster de atlas, pulsar connect, pulsar que tienes un shell instalado. Copiar la linea:
mongo "mongodb+srv://USUARIO:CONTRASENIA@CLUSTER/COLLECTION"
mongo "mongodb+srv://m001-student:m001-mongodb-basics@sandbox.wzwpg.mongodb.net/myFirstDatabase"
MongoDB Compass
No es la única, si la oficial. otra opción es Robo 3T
. robomongo.org
Compass es una herramienta muy completa para usar el lenguaje MQL de una manera muy cómoda. Visualización de databases, colecciones, documentos, todo muy visual, muy vistoso y con muchas opciones. Tanto si estás aprendiendo, como si ya controlas, esta herramienta es en mi opinión, obligatoria. Para todos los sistemas operativos. mongodb.com/download/compass
Visual studio code - MongoDB IDE
Trabajar en terminal puede resultar un poco duro, Atlas UI quizás no es lo que buscas.
Una de las formás que más me gusta es desde visual studio code y conectarme al cluster de Atlas. Para ello debes de instalar el plugin MongoDB for VS Code
. Se habilitará un icono en forma de hoja vertical a la izquierda.
Es ahí donde añades la conexión, que actualmente y esto puede cambiar a mejor siempre, tienes 2 sistemas, por la uri (todo en una misma url) o del método tradicional con host, usuario, contraseña…. personalmente prefiero la primera.
Puedes conectarte remotamente a atlas, o a un mongo que tengas local.
Una vez conectado, puedes hacer scripts, lo bueno es que lo colorea y visualmente se ve muy bien. Para ello ctrl+shift+p MongoDB: Create MongoDB Playground
. Puedes usar doble barra para comentarios.
//select the database tu use
show dbs
use('sample_training')
show collections
db.inspections.insert({"id":"12345-ttt",certificate_number:1234,"business_name":"abcde"})
db.inspections.find({}).sort({_id:-1}).limit(1)
Arriba a la derecha hay un icono de play. Al pinchar se muestra una ventana colorida del resultado (json).
Otro punto es que tiene autocompletado de colecciones y demás. Para más información hay varios videos en youtube: How to Use Visual Studio Code as Your MongoDB IDE.
JSON Vs BSON
JSON | BSON |
---|---|
codificado en utf8 string | codificado en binario |
tipos: String, Boolean, Number,Array | tipos: String, Boolean, Number (Integer, Long, Float,…), Array, Date, Raw Binary |
legible por humanos y máquinas | sólo máquinas. |
mongoimport | mongorestore |
mongoexport | mongodump |
Es decir, guardamos en BSON (con un soporte de tipos más enriquecido), pero lo leemos como un JSON.
Cargar ejemplo Dataset
Una vez creado un cluster, y db, en el botón de los 3 puntitos, seleccionar Load Sample Dataset
. Se descargará varias databases con sus respectivos collections. Ocupa 350mb, como el límite gratuito son de 500mb solo podrás tener 1 ejemplo importado.
Copias de seguridad y restauración
Para conocer más a fondo todas las opciones que tiene cada uno, en consola, usar --help
. En consola escribe mongo y tabulador, verás que hay otros pocos comandos más, como monodecript, mongofiles, mongokerberos
mongoexport --help
- mongoimport: importa el contenido de archivos JSON, CSV, TSV. Son colecciones enteras.
mongoimport --uri "<Atlas Cluster URI>" --drop miColeccion.json --collection miColeccion
mongoimport --uri "mongodb+srv://m001-student:m001-mongodb-basics@sandbox.wzwpg.mongodb.net/sample_supplies" --drop sales.json --collection sales
Si no se especifica la colección, la tomará del propio archivo json. --drop
hace borrar la anterior colección e incorporar la nueva. Si no lo ponemos e insertamos, si tienen la misma id, dará error de inserción en cada documento.
- mongoexport: exporta una colección de una db a un archivo JSON
mongoexport --uri "<Atlas Cluster URI>" --collection miColeccion --out nombreArchivo.json
Guarda en nombreArchivo.json la colección miColeccion del cluster del uri.
- mongorestore: restaura una copia de seguridad binaria (BSON) de una base de datos, creada con el comando
mongodump
.
mongorestore --uri "<Atlas Cluster URI>" --drop directorio_Donde_se_aloja_BSON
mongorestore --uri "mongodb+srv://m001-student:m001-mongodb-basics@sandbox.wzwpg.mongodb.net/sample_supplies" dump/sample_supplies
Si no se ha tocado nada, y no hay diferencias, dará un error. Puedes probar a borrar la bd para recuperarla de nuevo.
Donde dump es la carpeta donde se guardó con mongodump. En este caso recuperamos toda la db, que solo tiene una colección pero pudiera tener muchas más.
- mongodump: realiza un backup de una database (con todas sus colecciones). Lo exporta en BSON.
mongodump --uri "<Atlas Cluster URI>"
mongodump --uri "mongodb+srv://m001-student:m001-mongodb-basics@sandbox.wzwpg.mongodb.net/sample_supplies"
En mi ejemplo, guarda dentro de la carpeta dump
la database(db) sample_supplies la cual contiene una sola colección "sales".
Consultar collections y databases
-
Desde Atlas, mediante data explorer Clickando en collections.
Un namespace es una concatenación de database + collection.
-
Desde shell desde tu pc o máquina virtual.
mongo "mongodb+srv://m001-student:m001-mongodb-basics@sandbox.wzwpg.mongodb.net/admin" mongo "mongodb+srv://<username>:<password>@<cluster>.mongodb.net/admin"
Una vez accedido, se puede usar los siguientes comandos:
-
show dbs
: muestra todas las database -
use
databaseExample: acceder a la database -
show collections
: muestra todas sus colecciones. - hacer una búsqueda con filtros:
- ej: db.nombreCollection.find( {"state":"NY"} )
- ej: db.nombreCollection.find( {"state":"NY"} ).count()
- ej: db.nombreCollection.find( {"state":"NY"} ).pretty()
-
Crear y manipular documentos
-
Desde Atlas UI En clusters, selecciona una db, click en el collection a insertar, botón
insert document
. Pulsando + o tab se pasa al siguiente. -
Desde shell
show dbs use miDataBase show collections db.inspections.insert({"id":"12345-ttt",certificate_number:1234,"business_name":"abcde"}) db.inspections.find({}).sort({_id:-1}).limit(1)
No hace falta añadir el atributo _id
, ya que así se genera automáticamente.
A tener en cuenta: _id
es el identificador único de un documento en una colección. Es requerido en cada documento de MongoDB. Si usamos ObjectId()
, MongoDB creará una id única, por lo que es lo más recomendable, y no crear nosotros mismos una id ya sea string o number.
CRUD - CREATE, READ, UPDATE, DELETE
Operaciones básicas para documentos de colecciones. Crear, leer, actualizar y borrar documentos de colecciones de databases.
- Documentación mongoDB. Se trata de una guía muy completa, con un buscador arriba rápido y eficiente. A la izquierda tienes que seleccionar cual es la vs que usas.
Las operaciones más básicas las puedes ver en docs.mongodb.com/manual/crud/
- Read. Realizar consultas, queries. puedes usar
find
(básico) oaggregate
(es un completo framework que funciona a modo tuberías - pipes) - Update. Para actualizar documentos están
updateOne
,updateMany
yreplaceOne
. - Delete. Para borrar documentos se usa
deleteOne
ydeleteMany
. - Create. Para crear con
insertOne
yinsertMany
.
Framework Aggregation
Una forma más pro de realizar consultas, en vez de find, se usa aggregation.
Más información en docs.mongodb.com/manual/aggregation.
Lo que hace es por bloques, de una forma más organizada, se ve mucho mejor, más fácil de mantener. Personalmente lo veo un código mucho más limpio.
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
Una forma de probarlo muy visual es con Compass
, con solo hacer clicks, dificil equivocarse, con un entorno muy agradable.
Nota
Se que explico mucho y nada. Me gustaría que te hayas quedado con estas nociones generales, es una visión general de MongoDB, que sin duda, si la sigues puedes aprender mucho. Espero que te haya servido. Ten mucho en cuenta las url, que pueden haber cambiado en su tiempo, pero la idea es lo que importa. La api de Mongo es muy útil, y a diferencia de otras, esta tiene las 3 b: buena, bonita y barata.
escríbe algo en comentarios
😉 Gracias.