- MongoDB
- Crear Conexiones en mongoDB Compass
- Crear Cluster mongoDB - ATLAS
- Cargar Archivo
- Operadores
- Consulta de Datos (CRUD)
- Práctica de Comandos
- Tegnologías Utilizadas
- Certificación Gratuita
- Autor
Es un sistema de gestión de bases de datos de código abierto y orientado a documentos, que se clasifica dentro de la categoría de bases de datos NoSQL (Not Only SQL). Está diseñado para ser escalable, flexible y fácil de usar. En lugar de almacenar datos en tablas con filas y columnas, como en las bases de datos relacionales tradicionales, MongoDB almacena datos en documentos BSON (Binary JSON) dentro de colecciones.
Las colecciones serían el homologo a tablas en SQL.
Algunas de las ventajas de MongoDB incluyen:
- Modelo de Datos Flexible.
- Escalabilidad Horizontal.
- Alto Rendimiento.
- Replicación y Alta Disponibilidad.
- Admite Consultas Avanzadas.
- Soporte para Indexación.
Se puede hacer con una el Uniform Resource Identifier (URI) o rellenando los campos. Tambien se puede crar la conexion en el servidor local o en un servidor externo con mongodb ATLAS.
Al intentar crer una nueva conexión por defecto intenta establecer la conexión con el servidor local.
En el caso anterior se está creando la conexión local utilizando la URI, luego de esto se puede salvar la conexión y asignarle un color, para mayor facilidad.
Para el siguiente caso se está mostrando que se debe entrar en las opciones avanzadas de conexión para rellenar Host en General, Username y Password en Authentication y luego Replica Set Name en advance.
- mongodb://localhost:27017/
- mongodb://m001-student:m001-mongodb-basics@cluster0-shard-00-00-jxeqq.mongodb.net/?replicaSet=Cluster0-shard-0&tls=true
Hostname: cluster0-shard-00-00-jxeqq.mongodb.net
Authentication: Username / Password
Username: m001-student
Password: m001-mongodb-basics
Replica Set Name: Cluster0-shard-0
Read Preference: Primary Preferred
La conexión de práctica es una base de datos que consta de 13 colecciones.
Esto nos va ha facilitar hacer inserciones y modificaciones sobre bases de datos en una conexion remota.
Ir a la pagina de mongoDB - Atlas, crear una cuenta y luego escoger el servicio gratuito, en mi caso.
Luego sigue los pasos que te muestren, lo principal es la configuración del cluster, en mi caso utilicé AWS, en Virginia.
Al terminar faltaría configurar un usuario y una contraseña para acceder a la base de datos. esto se hace en Database Access, se debe colocar la opción de lectura y escritura para el usuario.
tambien sería útil por ser un práctica configurar la entrada para cualquier IP, esto ahorraría tiempo en configuración, esto se hace en Network Access
Luego en database y dando click a connect se puede obtener la URI para conectar con Compass y la shell de VS, sólo hay que cambiar por la contraseña de usuario creada.
Para cargar el archivo cargarPeliculas.js, es más sencillo hacerlo desde Compass. Después de crear la colección, ADD DATA y luego insert document y escoger e archivo. asi se puede cargar.
Desde la shell se puede hacer con el comando load(cargarPeliculas.js), pero el archivo debe estar en el mismo fichero donde se corre el comando load.
Nota: En mi caso particular la base de datos se lleva el nombre de basedd, pero debes colocar el nombre de tu base de datos.
Es mejor tener claro primero los operadores, para poder hacer el filtrado más adelante.
// AND
{ $and: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
// OR
{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
// NOR - Lo contrario a la condicción OR
{ $nor: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
// NOT
{ field: { $not: { <operator-expression> } } }
// Ejemplo
db.basedd.find( { $and: [ { year: 1998 }, { price: 10 } ] } )
// Igual a
{ field: { $eq: <value> } }
// Mayor que
{ field: { $gt: value } }
// Menor que
{ field: { $lt: value } }
// Mayor o igual que
{ field: { $gte: value } }
// Menor o igual que
{ field: { $lte: value } }
// Devuelve documentos que cumplen con los valores específicos del arreglo
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
// Devuelve documentos que NO cumplen con los valores específicos del arreglo
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
// Devuelve los documentos en los que el valor especificado no es igual
{ $ne: value } }
// Ejemplo
// Coincide con los documentos que tienen un campo especificado. Este operador
//tiene un valor booleano que puede ser true o false.
{ field: { $exists: <boolean> } }
// Hace coincidir los documentos según el tipo de campo especificado. Es útil cuando
//tienes datos muy desestructurados, o cuando los tipos de datos no son predecibles.
{ field: { $type: <BSON type> } }
// Hace coincidir con los documentos que contienen un campo de matriz con al menos un elemento
//que coincide con todos los criterios de consulta especificados.
{ : { $elemMatch: { <query1>, <query2>, ... } } }
// Para hacer coincidir los documentos en los que el valor de un campo especificado
//es igual al resto después de ser dividido por un valor especificado
{ field: { $mod: [ divisor, remainder ] } }
// busca un texto dentro del contenido del campo especificado, indexado con un índice
//de texto
{
$text:
{
$search: <string>,
$language: <string>,
$caseSensitive: <boolean>,
$diacriticSensitive: <boolean>
}
}
// Permite aprovechar las expresiones de agregación dentro del lenguaje de consulta
{ $expr: { <expression> } }
// Se usa para pasar una cadena que contenga una función completa de JavaScript o una
//expresión de JavaScript al sistema de consulta
{ $where: <string|JavaScript Code> }
Es un proceso similar al de SQL, se usa para mejorar el rendimiento de la base de datos. Pueden ser índices simples y múltiples.
//Crear indexación con índice único para un campo.
db.coleccion.createIndex({field : value},{unique : true})
// Da los índices de la colección
db.coleccion.getIndexes()
// Oculta la indexación
db.coleccion.hideIdex()
//Ordena la salida ascendente o descendente, número o letra.
.sort({field : 1})
//Muestra n documentos de salida
.limit(n)
Supongamos que tienes una colección de "ventas" que contiene documentos con la siguiente estructura:
{
"_id": ObjectId("60b674e31234567890abcdef"),
"producto": "Camiseta",
"cantidad": 5,
"precio_unitario": 20,
"fecha": ISODate("2022-06-01T00:00:00Z"),
"sucursal": "Sucursal_A"
}
db.ventas.aggregate([
// Etapa $match para filtrar ventas después de cierta fecha
{ $match: { fecha: { $gte: ISODate("2022-01-01") } } },
// Etapa $group para agrupar por producto y sucursal y calcular el total de ventas
{ $group: {
_id: { producto: "$producto", sucursal: "$sucursal" },
total_ventas: { $sum: { $multiply: ["$cantidad", "$precio_unitario"] } }
} },
// Etapa $project para darle un formato a los resultados
{ $project: {
_id: 0,
producto: "$_id.producto",
sucursal: "$_id.sucursal",
total_ventas: 1
} },
// Etapa $out para guardar los resultados en una nueva colección
{ $out: "ventas_totales_por_sucursal" }
])
//Explicación de las etapas de agregación:
$match: Filtra las ventas para incluir solo aquellas después de cierta fecha.
$group: Agrupa las ventas por producto y sucursal, y calcula el total de ventas para cada grupo.
$project: Da formato a los resultados, mostrando solo el producto, la sucursal y el total de ventas.
$out: Guarda los resultados en una nueva colección llamada "ventas_totales_por_sucursal".
//Muestra las bases de datos
show dbs
//Posiciona el cursor en la coleccion pertinente
use coleccion
// Muestra las colecciones dentro de la base de datos
db.getCollectionNames()
// borrar colección
db.coleccion.drop()
// asigna la referencia de la nueva base de datos (basedd) a la variable db
db = db.getSiblingDB("basedd")
//Muestra comandos mas usados
bd.help()
//Insertar un documento
db.coleccion.insertOne({})
//Insertar varios documentos
db.coleccion.insertMany({})
//Consultar una colección
db.coleccion.find()
// Consulta una coleccion, pero la muestra mas ordenada
db.coleccion.find().pretty()
// Devuleva el primer documento que encuentre que cumpla la condición
db.coleccion.findOne(query, projection, options)
// Modifica un documento
//Reemplaza el primer documento que filtre por el nuevo campo
db.coleccion.replaceOne(filter, reemplazo)
//Modifica el archivo por el campo especificado
db.coleccion.updateOne({query:{ }, update:{ }})
// Modifica varios documentos
db.coleccion.updateMany({query:{ }, update:{ }})
db.coleccion.findAndModify({query:{ }, update:{ }, new : false })
//Borra un documento
db.coleccion.deleteOne()
//Borra varios documentos
db.coleccion.deleteMany()
// Agrega un elemento
db.Peliculas.insertOne({year : 2023 , title : "The Little Mermaid" , director : "Rob Marshall" })
// Agregar varios elementos
db.Peliculas.insertMany([
{title:"Kung Fu Panda 4", year:2024, director:"Mike Mitchell"},
{title:"Karate Kid", year:2024, director:"Jonathan Entwistle"}
])
// Consulta si se agregaron
db.Peliculas.find({ _id:ObjectId('66266b7716622642e49f990b') } ) // conociendo el _id
db.Peliculas.find({year:2024},{year:1, title:1})
// Cursores
// Muestra los archivos del año 2024, sólo el año y el título,
// ordenado por alfabéticamente con título.
db.Peliculas.find({year:2024},{year:1, title:1}).sort({title:1})
// Muestra los documentos del año 1999, sólo el año y el título y
// los limita a los primero 3 documentos.
db.Peliculas.find({year:1999},{_id:0,year:1,title:1}).limit(3)
// Modificación de archivos
// Modifica el documento con título Kung Fu Panda 4 por Kunf Fu Panda #4
db.Peliculas.updateOne({title:"Kung Fu Panda 4"},{$set:{title:"Kung Fu Pandas #4"}})
// Modifica todos loa documentos del año 2024, suma un año a todos los archivos (2025)
db.Peliculas.updateMany({year:2024},{$inc:{year:1}})
// Para borrra lo más sensato es borrar por _id
// Borra el primer archivo del año 2023
db.Peliculas.deleteOne({year:2023})
// Borra los archivos con año mayor o igual a 2023
db.Peliculas.deleteMany({year:{$gte:2023}})
- mongoDb - Version 7.0.7
- mongoDB Compass - Version 1.42.3
- mongoDB Shell - Version 2.2.2
- Visual Studio - Version 1.88.0
- Visulal Studio - Estension MongoDB for VS - V.1.5.0
Se puede obtener certificado gratuito para varios tipos de cursos en la página oficial de MongoDB https://learn.mongodb.com/
- José R. Guignan
- Mail: joserguignan@gmail.com
- Linkedin: https://www.linkedin.com/in/jrguignan