mongomongodbnosqlcompassatlasclusterdbscollectionsdocumentscassandracollectioncrudAggregation
jolugama.com

MongoDB - tutorial básico - Atlas, Compass

Publicado: por

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) o aggregate (es un completo framework que funciona a modo tuberías - pipes)
  • Update. Para actualizar documentos están updateOne, updateMany y replaceOne.
  • Delete. Para borrar documentos se usa deleteOne y deleteMany.
  • Create. Para crear con insertOne y insertMany.

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.

 
... y finalmente... Si te ha gustado, difúndelo. Es solo un momento. escríbe algo en comentarios 😉 Gracias.