MongoDB vs. SQL

Mostrar bases de datos disponibles en MongoDB
1 |
show databases |
Crear una nueva base de datos o seleccionar una base de datos existente en MongoDB
1 |
use nombre_de_la_base_de_datos_nueva_o_existente |
Para saber en qué base de datos me encuentro bastará con escribir:
1 |
db |
Mostrar colecciones disponibles en MongoDB
1 |
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.
1 2 3 4 5 6 |
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:
1 2 3 4 5 6 7 8 |
var cantante1 = { nombre : 'Paco', apellido: 'Pill', canciones: ['Viva La Fiesta', 'Johnny Techno Ska'] }; db.cantantes.insert(cantante1); |
Agregamos un par de cantantes más:
1 2 3 4 5 6 |
db.cantantes.insert( { nombre: 'Fernando', apellido : 'Esteso', canciones : ['La Ramona' , 'Soy un Vividor'] }); |
1 2 3 4 5 6 7 |
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:
1 |
db.cantantes.find(); |
Que nos devolverá los siguientes resultados:
1 |
{ "_id" : ObjectId("5e7a90c593aac12d3eeb46cf"), "nombre" : "Paco", "apellido" : "Pill", "canciones" : [ "Viva La Fiesta", "Johnny Techno Ska" ] } |
1 |
{ "_id" : ObjectId("5e7a90df93aac12d3eeb46d0"), "nombre" : "Fernando", "apellido" : "Esteso", "canciones" : [ "La Ramona", "Soy un Vividor" ] } |
1 |
{ "_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.
1 2 |
<strong>Si queremos hacer una búsqueda solo mostrando el nombre:</strong> db.cantantes.find( {}, { nombre: 1 }) |
1 2 |
<strong>Si queremos hacer una búsqueda escondiendo el id:</strong> 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:
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE apellido = 'López' <strong>MongoDB:</strong> db.cantantes.find({ apellido: 'López' }); |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE apellido = 'López' and edad = 38 <strong>MongoDB:</strong> db.cantantes.find({ apellido: 'López', edad: 38 }); |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE (apellido = 'López' and edad = 38) OR (apellido = 'Esteso') <strong>MongoDB:</strong> db.cantantes.find({ $or: [{apellido: 'López', edad: 38}, {apellido: 'Esteso'}] }); |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE apellido <> 'Lopez' <strong>MongoDB:</strong> db.cantantes.find({ apellido: {$ne: 'López'}}); |
1 |
<strong>SQL:</strong><br>SELECT * FROM cantantes WHERE apellido <> 'Lopez'<br><br><strong>MongoDB:</strong><br>db.cantantes.find({ apellido: {$ne: 'López'}}); |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE apellido IN ('Lopez','Esteso') <strong>MongoDB:</strong> 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()
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes LIMIT 1 <strong>MongoDB:</strong> 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()
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes ORDER BY apellido DESC <strong>MongoDB:</strong> db.cantantes.find().sort({apellido: 1}); |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes ORDER BY apellido ASC <strong>MongoDB:</strong> db.cantantes.find().sort({apellido: -1}); |
También podemos combinar ambas funciones:
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes ORDER BY apellido DESC LIMIT 1 <strong>MongoDB</strong>: db.cantantes.find().sort({apellido:1}).limit(1) |
Operadores en MongoDB
1 2 3 4 |
$gt > %gte >= $lt < $lte <= |
1 2 3 4 5 |
<strong>SQL:</strong> SELECT * FROM cantantes WHERE edad BETWEEN 10 AND 50 <strong>MongoDB</strong>: 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.
1 2 3 4 5 |
<strong>SQL:</strong> DELETE FROM cantantes WHERE apellido = 'Esteso' <strong>MongoDB</strong>: db.cantantes.remove({ apellido: 'Esteso'}); |
Caso 2: Eliminar todos los documentos de una colección.
1 2 3 4 5 |
<strong>SQL:</strong> DELETE FROM cantantes <strong>MongoDB</strong>: db.cantantes.remove({}); |
Caso 3: Eliminar toda la colección.
1 2 3 4 5 |
<strong>SQL:</strong> DROP TABLE cantantes <strong>MongoDB</strong>: db.cantantes.drop(); |
Caso 4: Eliminar toda la base de datos.
1 2 |
<strong>MongoDB</strong>: db.dropDatabase() |
Actualizar registros (documentos) en MongoDB
.update()
Para actualizar podemos usar $set o $unset:
1 2 3 |
<strong>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.</strong> db.cantantes.update( {nombre: 'Pablo'}, { $set: {nombre: 'Pableras'}} , { multi: true} ) |
1 2 3 4 5 |
<strong>Volvemos a poner el nombre como estaba y borramos el campo edad:</strong> db.cantantes.update( {nombre: 'Pableras'}, { $set: {nombre: 'Pablo'}} , { multi: true} ) db.cantantes.update( {nombre: 'Pablo'}, { $unset: { edad: 1 }} , { multi: true} ) |