MongoDB vs. SQL

Mostrar bases de datos disponibles en MongoDB

show databases

Crear una nueva base de datos o seleccionar una base de datos existente en MongoDB

use nombre_de_la_base_de_datos_nueva_o_existente

Para saber en qué base de datos me encuentro bastará con escribir:

db

Mostrar colecciones disponibles en MongoDB

show collections

Creación de registros (documentos) en MongoDB

Las operaciones en MongoDB son como funciones de Javascript, así que llamaremos al objeto de base de datos db y crearemos una nueva colección o lo que se asemejaría al concepto de tabla con el nombre de cantantes y le asociaremos su valor correspondiente (un objeto cantante), es decir una tabla con una entrada (documento) asociado.

db.cantantes.insert(
     { 
       nombre: 'Paco', 
       apellido  : 'Pill',  
       canciones : ['Viva La Fiesta' , 'Johnny Techno Ska'] 
      });

Creación de registros (documentos) en MongoDB con variables

.insert()

También es posible declarar el documento como objeto, almacenando en una variable y insertándose de la siguiente forma:

var cantante1 = 
          { 
             nombre : 'Paco', 
             apellido: 'Pill', 
             canciones: ['Viva La Fiesta', 'Johnny Techno Ska'] 
          };

db.cantantes.insert(cantante1);

Agregamos un par de cantantes más:

db.cantantes.insert(
          { 
             nombre: 'Fernando', 
             apellido  : 'Esteso',  
             canciones : ['La Ramona' , 'Soy un Vividor'] 
          });
db.cantantes.insert(
          { 
             nombre: 'Pablo', 
             apellido  : 'López',  
             canciones : ['El Patio' , 'Mi Gato', 'Tu Enemigo'],             
             edad: 38 
          });

Podemos insertar nuevos documentos en la colección de autores que tienen otra estructura, en MongoDB esto es completamente posible y es una de sus ventajas.

Búsqueda de registros (documentos) en MongoDB

.find()

Podemos hacer una query o búsqueda de todos los registros en la colección de cantantes de la siguiente forma:

db.cantantes.find();

Que nos devolverá los siguientes resultados:

{ "_id" : ObjectId("5e7a90c593aac12d3eeb46cf"), "nombre" : "Paco", "apellido" : "Pill", "canciones" : [ "Viva La Fiesta", "Johnny Techno Ska" ] }
{ "_id" : ObjectId("5e7a90df93aac12d3eeb46d0"), "nombre" : "Fernando", "apellido" : "Esteso", "canciones" : [ "La Ramona", "Soy un Vividor" ] }
{ "_id" : ObjectId("5e7a90e693aac12d3eeb46d1"), "nombre" : "Pablo", "apellido" : "López", "canciones" : [ "El Patio", "Mi Gato", "Tu Enemigo" ], "edad" : 38 }

En este caso se nos devuelven los objetos resultantes acompañados del identificador único que crea MongoDB, este campo _id se toma además como índice por defecto.

Si queremos hacer una búsqueda solo mostrando el nombre:
db.cantantes.find( {}, { nombre: 1 })
Si queremos hacer una búsqueda escondiendo el id:
db.cantantes.find( {}, { _id: 0 }})

Búsqueda de registros (documentos) con filtros en MongoDB

Si queremos hacer una búsqueda filtrando por alguno de los parámetros aquí podemos ver algunas queries SQL y sus equivalentes en MongoDB:

SQL:
SELECT * FROM cantantes WHERE apellido = 'López'

MongoDB:
db.cantantes.find({ apellido: 'López' });
SQL:
SELECT * FROM cantantes WHERE apellido = 'López' and edad = 38

MongoDB:
db.cantantes.find({ apellido: 'López', edad: 38 });
SQL:
SELECT * FROM cantantes WHERE (apellido = 'López' and edad = 38) OR (apellido = 'Esteso')

MongoDB:
db.cantantes.find({ $or: [{apellido: 'López', edad: 38}, {apellido: 'Esteso'}] });
SQL:
SELECT * FROM cantantes WHERE apellido <> 'Lopez'

MongoDB:
db.cantantes.find({ apellido: {$ne: 'López'}});
SQL:
SELECT * FROM cantantes WHERE apellido <> 'Lopez'

MongoDB:
db.cantantes.find({ apellido: {$ne: 'López'}});
SQL:
SELECT * FROM cantantes WHERE apellido IN ('Lopez','Esteso')

MongoDB:
db.cantantes.find({ apellido: {$in: ['López','Esteso']}});

Limitar y ordenar búsquedas en MongoDB

.limit(#) .short()

Si queremos limitar los resultados a un número máximo especificado de registros es tan fácil como agregar .limit(#) al final del comando .find()

SQL:
SELECT * FROM cantantes LIMIT 1

MongoDB:
db.cantantes.find().limit(1)

Podemos a su vez ordenar los registros por un campo en particular, el cual servirá de argumento de la función .short()

SQL:
SELECT * FROM cantantes ORDER BY apellido DESC

MongoDB:
db.cantantes.find().sort({apellido: 1});
SQL:
SELECT * FROM cantantes ORDER BY apellido ASC

MongoDB:
db.cantantes.find().sort({apellido: -1});

También podemos combinar ambas funciones:

SQL:
SELECT * FROM cantantes ORDER BY apellido DESC LIMIT 1

MongoDB:
db.cantantes.find().sort({apellido:1}).limit(1)

Operadores en MongoDB

$gt 		>
%gte 		>=
$lt 		<
$lte 		<=
SQL:
SELECT * FROM cantantes WHERE edad BETWEEN 10 AND 50

MongoDB:
db.cantantes.find({edad: {$gt: 10, $lt: 50}})

Borrar registros (documentos) en MongoDB

.remove() .drop()

El borrado de registros es muy similar a la forma en que se buscan.

Existen 3 posibilidades para borrar registros, veamos algunas queries y sus equivalentes en SQL:

Caso 1: Eliminar los documentos de una colección que cumplan alguna condición.

SQL:
DELETE FROM cantantes WHERE apellido = 'Esteso'

MongoDB:
db.cantantes.remove({ apellido: 'Esteso'});

Caso 2: Eliminar todos los documentos de una colección.

SQL:
DELETE FROM cantantes

MongoDB:
db.cantantes.remove({});

Caso 3: Eliminar toda la colección.

SQL:
DROP TABLE cantantes

MongoDB:
db.cantantes.drop();

Caso 4: Eliminar toda la base de datos.

MongoDB:
db.dropDatabase()

Actualizar registros (documentos) en MongoDB

.update()

Para actualizar podemos usar $set o $unset:

Cambiaremos el nombre de Pablo a Pableras. El parámetro multi es para ver si hay más de un documento con esa condición.

db.cantantes.update( {nombre: 'Pablo'}, { $set: {nombre: 'Pableras'}} , { multi: true} )
Volvemos a poner el nombre como estaba y borramos el campo edad:

db.cantantes.update( {nombre: 'Pableras'}, { $set: {nombre: 'Pablo'}} , { multi: true} )

db.cantantes.update( {nombre: 'Pablo'}, { $unset: { edad: 1 }} , { multi: true} )

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada.