Skip to content

Repositorio dónde guardo mis prácticas de consultas, modificaciones y conexiones en mongoDB.

Notifications You must be signed in to change notification settings

jrguignan/Practica_mongoDB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 
 
 

Repository files navigation

Índice

MongoDB

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.


Volver al Índice

Crear Conexiones en mongoDB Compass

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.

Datos conexión

URI Servidor local:

  • mongodb://localhost:27017/

URI Conexión de Práctica:


Datos a Rellenar Conexión de Práctica:

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.


Volver al Índice

Crear Cluster mongoDB - ATLAS

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.


Volver al Índice

Cargar Archivo

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.


Volver al Índice

Operadores

Es mejor tener claro primero los operadores, para poder hacer el filtrado más adelante.

Operadores de Lógicos

// 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 } ] } )


Volver al Índice

Comparación

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


Volver al Índice

Elementos


// 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>, ... } } }


Volver al Índice

Evaluación

// 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> }


Volver al Índice

Indexación

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()


Volver al Índice

Método de Cursores

//Ordena la salida ascendente o descendente, número o letra.

.sort({field : 1})


//Muestra n documentos de salida

.limit(n)


Volver al Índice

Agregació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".


Volver al Índice

Consulta de Datos (CRUD)

Comandos Básicos y Proyección

//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()


Volver al Índice

Inserción

//Insertar un documento

db.coleccion.insertOne({})


//Insertar varios documentos

db.coleccion.insertMany({})


Volver al Índice

Lectura

//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)


Volver al Índice

Actualización

// 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 })


Volver al Índice

Borrado

//Borra un documento

db.coleccion.deleteOne()


//Borra varios documentos

db.coleccion.deleteMany()


Volver al Índice

Prática de Comandos

// 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}})


Volver al Índice

Tegnologías Utilizadas

  • 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


Volver al Índice

Certificación Gratuita

Se puede obtener certificado gratuito para varios tipos de cursos en la página oficial de MongoDB https://learn.mongodb.com/

Autor

About

Repositorio dónde guardo mis prácticas de consultas, modificaciones y conexiones en mongoDB.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published