mongodb

John Cardozo

John Cardozo

mongodb

qué es mongodb?

MongoDB es una base de datos orientada a documentos.

Se clasifica como base de datos NoSQL

Almacena los datos en documentos flexibles con formato JSON

Los campos pueden variar en estructura entre documentos

ejemplo de un documento mongodb

{
  nombre: "Catalina",
  edad: 20,
  hobbies: ["leer", "correr"],
  lugarNacimiento: {
    ciudad: "Bogotá",
    pais: "Colombia"
  }
}
{
  nombre: "Valeria",
  edad: 7,
  lugarNacimiento: {
    ciudad: "Bogotá",
  }
}
{
  nombre: "Emilio",
  edad: 10,
  hobbies: ["videojuegos"]
}
{
  nombre: "Luciana",
  edad: 2,
  rh: "a+",
  padres: {
    madre: {
      nombre: "Diana"
    },
    padre: {
      nombre: "Julian"
    }
  }
}

Ejemplos de documentos de la colección Usuarios

Documento embebido

diferencias entre sql y nosql

Relacionales

No relacionales

Lenguaje estructurado con esquema predefinido

Esquemas dinámicos con datos no estructurados

Escalables verticalmente

Escalables horizontalmente

Basados en tablas de estructura rígida

Basados en documentos, clave-valor o grafos

SQL

NOSQL

quién usa mongodb?

base de dAtos: local & remota

Instancia Local

MongoDB Community Server

Instancia remota: nube

MongoDB Atlas

acceso a la base de datos

Consola - comando: mongo

MongoDB Compass

Robo3T

comandos básicos del shell

use tareas_db

Usar una BD

show dbs

Mostrar las BD del servidor

show collections

Mostrar las colecciones de la BD

db

Mostrar la BD de trabajo

quit()

Salir de la consola

show users

Mostrar los usuarios

mongo "mongodb+srv://<url>" --username <usuario>

Conexión al servidor

mongo "mongodb+srv://cluster0.0jhhf.mongodb.net" --username usuario_tareas

solo admin

Shell para Mac

mongosh

conexión a mongodb atlas desde robo3t

Clusters 

CONNECT

Connect your application

MongoDB Atlas

Seleccionar cualquier DRIVER y VERSION

mongodb+srv://usuario_tareas:<password>@cluster0.0jhhf.mongodb.net/<dbname>?retryWrites=true&w=majority

cadena de conexión

reemplazar <password> y <dbname>

Verificar que el servidor esté configurado para aceptar conexiones remotas: network access

conexión al servidor desde robo3t

1

2

3

4

5

6

7

ventana principal de robo3t

Servidor

base de datos

collecciones

inicio del shell

creación de documentos

db.createCollection('peliculas')

Crear una colección

db.peliculas.insert(
{
  titulo: 'Pulp Fiction',
  anio: 1994
})

Insertar un documento en una colección

db.peliculas.insert([
  {
    titulo: 'Django Unchained',
    anio: 2012
  },
  {
    titulo: 'Kill Bill: Volume 1',
    anio: 2003
  }
])

Insertar varios documentos

db.peliculas.drop()

Eliminar una colección

buscar documentos - I

db.peliculas.find()

Buscar todos los documentos

db.peliculas.find(
  {
    anio: 2003
  }
)

Buscar documentos por criterio

db.peliculas.find({
  _id: ObjectId("5fa2cc79bd68fc261e57852e") 
})

Buscar documentos por id

buscar documentos - II

db.peliculas.find(
  {
    anio: {$lt: 2003}
  }
)

Buscar documentos con criterio de comparación

lt

db.peliculas.find(
  {'titulo': /c/}
)

Buscar documentos por criterio LIKE

películas que contiene la letra 'c'

menor

lte

menor o igual

gt

mayor

gte

mayor o igual

buscar documentos - III

db.peliculas.find(
  {
    $and: [
      {anio: {$lt: 2015}},
      {anio: {$gt: 2000}}
    ]
  }
)

Buscar documentos con criterio AND

db.peliculas.find(
  {
    $or: [
      {anio: 1994},
      {anio: 2003}
    ]
  }
)

Buscar documentos con criterio OR

db.peliculas.find().count()

Contar documentos

db.peliculas.find().limit(2)

Limitar  documentos

db.peliculas.find().sort({
    titulo: 1
})

Ordenar  documentos

1: ascendente
-1: descendente

documentos anidados - I

db.peliculas.insert(
  {
    titulo: 'Once upon a Time in Hollywood',
    anio: 2019,
    director: {
      nombres: 'Quentin',
      apellidos: 'Tarantino'
    }
  }
)

Creación de documentos anidados

db.peliculas.find(
  { 
    "director.nombres": "Quentin"
  }
)

Buscar documentos con documentos anidados

documentos anidados - II

db.peliculas.insert(
{
  titulo: 'The Hateful Eight',
  anio: 2015,
  director: {
      nombres: 'Quentin',
      apellidos: 'Tarantino'
      },
  actores: ['Samuel', 'Kurt', 'Tim']
})

Creación de documentos anidados con arreglos

db.peliculas.find(
  { 
      actores: "Samuel"
  }
)

Buscar documentos con un valor en un arreglo

modificar un documento

db.peliculas.update(
  { titulo: 'Pulp Fiction'},
  { anio: 1993}
)

Reemplaza TODO el documento

db.peliculas.update(
  { titulo: 'Pulp Fiction' },
  {
    $set: {
      anio: 1993
    }
  }
)

Si se desea mantener datos previos y no reemplazar todo el documento: $set

Si hay atributos que no existen se crean

!

update solo modifica un documento

modificar o crear un documento

db.peliculas.update(
  { titulo: 'Inglorious Bastards' },
  {
    titulo: 'Inglorious Basterds',
    anio: 2009      
  },
  { upsert: true } 
)

Modificar un documento pero si no existe, lo crea

atributos de un documento

db.peliculas.update(
  { titulo: 'The Hateful Eight' },
  { 
    $unset: {
      actores: 1
    }
  }
)

Eliminar un atributo del documento

db.peliculas.update(
  { titulo: 'Inglorious Basterds' },
  { 
    $rename: {
      'anio': 'year'
    }    
  }
)

Renombrar un atributo del documento

db.peliculas.updateMany(
  { director: { $exists: true } },
  { $unset: { director: true } }
)  

Elimina un atributo de todos los documentos que cumplan contengan el atributo

db.peliculas.find(
  { director: {$exists: true} }
)

Busca los documentos que tengan un atributo

modificar varios documentos

db.peliculas.updateMany(
  { anio: 1994 },
  {
    $set:{
      anio: 2000
    }
  }
)

Modifica todos los documentos que cumplan con el criterio

db.peliculas.updateMany(
  { 
    $or: [
      { anio: 2000},
      { anio: 2003}
    ]
  },
  {   
    $set: {
      titulo: 'desconocido'
    }
  }
)

Modifica todos los documentos que cumplan con el criterio OR

eliminar documentos

db.peliculas.remove(
  { titulo: 'desconocido' }
)

Elimina todos los documentos que cumplan con el criterio

db.peliculas.remove(
  { $or: [
      { anio: 2019},
      { anio: 2015}
    ]
  }
)

Elimina todos los documentos que cumplan con el criterio OR

iterar sobre documentos

db.peliculas.find().forEach(
  function (documento){
    print('Titulo de la pelicula: ' + documento.titulo)
  }
)

Itera los documentos e invoca una función sobre cada uno

crear usuarios

db.createUser({
	user: "john",
	pwd: "123",
	roles: ["readWrite", "dbAdmin"]
})

Se pueden crear nuevos usuarios si está autenticado con usuario administrador

john cardozo

johncardozo@gmail.com

Made with Slides.com