Características de MongoDB
Características principales:
- Consultas ad hoc. Con MongoDb podemos realizar todo tipo de consultas. Podemos hacer búsqueda por campos, consultas de rangos y expresiones regulares. Además, estas consultas pueden devolver un campo específico del documento, pero también puede ser una función JavaScript definida por el usuario.
- Indexación. El concepto de índices en MongoDB es similar al empleado en bases de datos relacionales, con la diferencia de que cualquier campo documentado puede ser indexado y añadir múltiples índices secundarios.
- Replicación. Del mismo modo, la replicación es un proceso básico en la gestión de bases de datos. MongoDB soporta el tipo de replicación primario-secundario. De este modo, mientras podemos realizar consultas con el primario, el secundario actúa como réplica de datos en solo lectura a modo copia de seguridad con la particularidad de que los nodos secundarios tienen la habilidad de poder elegir un nuevo primario en caso de que el primario actual deje de responder.
- Balanceo de carga. Resulta muy interesante cómo MongoDB puede escalar la carga de trabajo. MongoDB tiene la capacidad de ejecutarse de manera simultánea en múltiples servidores, ofreciendo un balanceo de carga o servicio de replicación de datos, de modo que podemos mantener el sistema funcionando en caso de un fallo del hardware.
- Almacenamiento de archivos. Aprovechando la capacidad de MongoDB para el balanceo de carga y la replicación de datos, Mongo puede ser utilizado también como un sistema de archivos. Esta funcionalidad, llamada GridFS e incluida en la distribución oficial, permite manipular archivos y contenido.
- Ejecución de JavaScript del lado del servidor. MongoDB tiene la capacidad de realizar consultas utilizando JavaScript, haciendo que estas sean enviadas directamente a la base de datos para ser ejecutadas.
Cómo funciona MongoDB
MongoDB es una base de datos orientada a documentos. Esto quiere decir que en lugar de guardar los datos en registros, guarda los datos en documentos. Estos documentos son almacenados en BSON, que es una representación binaria de JSON. Y que en lugar de tablas crea colecciones.
- Los documentos están almacenados en colecciones.
- Las colecciones están en una base de datos.
- Ejemplo:
- DB tienda
- Colecciones: productos, clientes proveedores.
- Ejemplo:
Imaginemos que tenemos una colección a la que llamamos Personas. Un documento podría almacenarse de la siguiente manera:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ Nombre: "Enrique", Apellidos: "Carricoba", Edad: 25, Aficiones: ["Diseño","programación","musica"], Amigos: [ { Nombre:"Gonzalo", Edad:23 }, { Nombre:"Adrian", Edad:22 } ] } |
Como se puede ver el documento es exactamente igual a lo que conocemos de un documento JSON.
El ID
Al igual que en las bases relacionales necesitamos un campo indice para identificar los documentos dentro de las colecciones. En el caso de monto si no incluimos un id al insertar el documento el motor creara un Objectid. Las restriciones para este campo son:
- Es inmutable
- No puede ser un array
- tiene que ser único
Los tipos en MongoBD (BSON)
- Los tipos admitidos en Mongo son:
- Las claves siempre serán Strings.
- Los tipos de valores admitidos son:
- String (Ej: «Laura»)
- number (Ej: 29,36,02)
- Booleanos: true / false
- null
- arrays (Ej: [88.55.58,23.58,3])
- Object (Ej: {«alumno»:»Dani», «nota»:10} )
Instalación de Mongo en local
Para estos primeros pasos trabajaremos con MongoBD localmente y desde la propia terminal, para ello lo vamos a instalar en nuestro sistema. Para descargar el paquete .msi para windows lo puedes encontrar en https://www.mongodb.com/. Por defecto los binarios una vez instalados se guardaran en la carpeta c:\Program files\MongoDB\Server\<version>\bin.
Si no cambiamos los path, por defecto las colecciones se guardaran en la carpeta \data\db, por lo que creamos esa carpeta en el ordenador. Veamos como hacerlo.
La versión de instalación que estamos usando para este ejemplo puedes descargarlas de: MONGODB-4,2,2
Descargamos el archivo y procedemos con la instalación, esta es desatendida y no debería darnos problemas.

Hacemos una instalación completa y dejamos todos los parámetros por defecto.

Una vez instalado, primero vamos a crear la carpeta en la raíz del disco para almacenar las bases de datos.

Y ahora vamos a lanzar MongoDB, para ello nos dirigimos a la carpeta de instalación y lo ejecutamos.

Al ejecutarlo el servicio se pone en marcha. Es importante que no cierres la ventana durante la manipulación de datos, esta ventana se tiene que mantener abierta a lo largo del desarrollo.

Abrimos una nueva terminal CMD y ejecutamos el archivo mongo.exe en la carpeta de instalación.

MongoDB desde la terminal
Una vez estamos en el entorno de consola de MongoBD vamos a conocer los comando principales para la manicupación de datos.
Show dbs

(Si queremos ver las coleciones que contiene una BD usaremos show collections)
Este comando nos mostrará por pantalla las bases de datos que tenemos actualmente junto con el espacio que ocupan en memoria. Esas bases de datos son las del sistema y no deberíamos tocarlas, asique vamos a crear una base de datos propia. La vamos a llamar ‘Universidad’:
use Universidad
Con ese comando ya hemos accedido a una nueva base de datos temporal llamada ‘Universidad’. ¿Por qué temporal? Si volveis a usar el comando para listar las bases de datos podréis ver que ‘Universidad’ no aparece lista. MongoDB no crea una base de datos hasta que no tiene al menos un dato almacenado en ella. Ahora vamos a crear dos colecciones, una de ’Estudiantes’ y otra de ‘Estudios’. Para ello, solo basta con insertar un dato.
db.Estudiantes.insert({Codigo:7061,DNI:»02555438T»,Nombre:»Jorge»,Apellido: «Chercoles»,Edad:21})
y para ver los resultados.
db.Estudiantes.find()

Cómo podemos ver hemos creado una colección con un documento. Para seguir aplicando ejemplos primer vamos a llenar con datos nuestra colección. Nos ayudaremos de una utilidad de monfo que nos sirve para la importación de datos de forma fácil.
Importación de datos
Vamos a utilizar una funcionalidad de MongoDB que permite importar directamente desde un archivo .csv a nuestra base de datos. Para ello vamos a descargar los archivos .csv con los datos de los ejemplos con los que vamos a trabajar.
Ahora desde otra terminal (de windows) vamos a ejecutar el comando mongoimport:
|
1 |
mongoimport --db <db-name> --collection <coll-name> --type json --file nombrearchivo.json --jsonArray |
-d Indica la base de datos a utilizar
-c Indica la colección a utilizar
–type Indica el tipo de archivo
–file Indica la ruta del archivo
–headerline Indica si la primera linea son los campos de la colección
Ejecutaremos el mismo comando pero cambiado la colección a Estudios el archivo a estudios.csv
Si listamos todos los registros que hay en la colección ‘Estudiantes’ nos mostrará todos los del archivo
Opciones de mongoimport:
- -d Indica la base de datos a utilizar
- -c Indica la colección a utilizar
- –type Indica el tipo de archivo
- –file Indica la ruta del archivo
- –headerline Indica si la primera linea son los campos de la colección
Ejecutaremos el mismo comando pero cambiado la colección a Estudios el archivo a estudios.csv. Si listamos todos los registros que hay en la colección ‘Estudiantes’ utilizando .find(), nos mostrará todos los del archivo al igual que en ‘Estudios’

TRUCO: Aunque Mongoimport es capaz de importar archivos csv, a veces esta nos da errores, por lo que resulta útil transformar estos documentos a JSON que es el formato más reconocible. Un ejemplo de este tipo de herramientas es: https://www.convertcsv.com/csv-to-json.htm
y pondriamos.
c:\mongoimport –db Universidad –collection Estudiantes –type json –file estudiantes.json–jsonArray
Operaciones básicas de un CRUD con MongoDB
Para contar los elementos de la colección de Estudiantes utilizaremos el comando:
db.Estudiantes.count()

Si queremos filtrar los estudiantes según su apellido escribiremos:
db.Estudiantes.find({«Apellido»:»CESAR»})
![]()
Si queremos ordenar los estudios según is EsiD campo, solo tenemos que escribir .sort({EsID: 1}) al final de la consulta select:
db.Estudios.find().sort(EsID:1)

Para eliminar un registro concreto usaremos:
db.Estudios.remove({«EsID»:»IG001″})

Para actualizar un dato usaremos la sentencia update, donde especificaremos el filtro que quiere que haga y el nuevo dato o datos:
db.Estudios.update({EsID:»IG002″},{$set:{Titulo:»CIBERSEGURIDAD»}})
El primer elemento ahora tiene como título CIBERSEGURIDAD en vez de BIGDATA que era el anterior.

Para salir utilizaremos el comando exit.
Filtros (operadores)
Operadores de consulta de comparación ¶
| Nombre | Descripción |
|---|---|
$eq |
Coincide con valores que son iguales a un valor especificado. |
$gt |
Coincide con valores que son mayores que un valor especificado. |
$gte |
Coincide con valores que son mayores o iguales a un valor especificado. |
$in |
Coincide con cualquiera de los valores especificados en una matriz. |
$lt |
Coincide con valores que son menores que un valor especificado. |
$lte |
Coincide con valores que son menores o iguales a un valor especificado. |
$ne |
Coincide con todos los valores que no son iguales a un valor especificado. |
$nin |
No coincide con ninguno de los valores especificados en una matriz. |
Operadores de consultas lógicas ¶
| Nombre | Descripción |
|---|---|
$and |
Une cláusulas de consulta con una lógica ANDdevuelve todos los documentos que cumplen las condiciones de ambas cláusulas. |
$not |
Invierte el efecto de una expresión de consulta y devuelve documentos que no coinciden con la expresión de consulta. |
$nor |
Une cláusulas de consulta con una lógica NORdevuelve todos los documentos que no coinciden con ambas cláusulas. |
$or |
Une cláusulas de consulta con ORdevoluciones lógicas de todos los documentos que cumplen las condiciones de cualquiera de las cláusulas. |
Operadores de consulta de elementos
| Nombre | Descripción |
|---|---|
$exists |
Coincide con documentos que tienen el campo especificado. |
$type |
Selecciona documentos si un campo es del tipo especificado. |