Creación de registros - .insert()
Las operaciones son como funciones de Javascript, así que llamaremos al objeto base de datos db
y crearemos una nueva propiedad o lo que se asemejaría al concepto de tabla con el nombre de autores
y le asociaremos su valor correspondiente (un objeto autor), es decir, una colección con un documento asociado:
12345 >dbautoresinsert({ nombre : 'Jonathan', apellido : 'Wiesel', secciones : ['Como lo hago','MongoDB']});
Los documentos se definen como los objetos Javascript, u objetos JSON.
Inclusive es posible declarar el documento como un objeto, almacenarlo en una variable y posteriormente insertarlo de la siguiente manera:
> var autorDelPost = { nombre : 'Jonathan', apellido : 'Wiesel', secciones : ['Como lo hago' , 'MongoDB'] }; > db.autores.insert(autorDelPost);1234567 >varautorDelPost={ nombre :'Jonathan', apellido :'Wiesel', secciones :['Como lo hago','MongoDB']}; >dbautoresinsert(autorDelPost);
Ahora si ejecutamos el comando show collections
podremos ver que se encuentra nuestra nueva colección de autores:
12 autores
Agreguemos un par de autores más:
> db.autores.insert({ nombre : 'Oscar', apellido : 'Gonzalez', secciones : ['iOS' , 'Objective C' , 'NodeJS' ], socialAdmin : true }); > db.autores.insert({ nombre : 'Alberto', apellido : 'Grespan', secciones : 'Git', genero : "M" });123456789101112 >dbautoresinsert({ nombre : 'Oscar', apellido : 'Gonzalez', secciones : ['iOS','Objective C','NodeJS'], socialAdmin: true});>dbautoresinsert({ nombre : 'Alberto', apellido : 'Grespan', secciones : 'Git', genero : "M"});
Veamos que insertamos 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 - .find()
Hagamos un query o una busqueda de todos registros en la colección de autores.
> db.autores.find(); { "_id" : ObjectId("5232344a2ad290346881464a"), "nombre" : "Jonathan", "apellido" : "Wiesel", "secciones" : [ "Como lo hago", "Noticias" ] } { "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" : "Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" : true } { "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido" : "Grespan", "secciones" : "Git", "genero" : "M" }12345 >dbautoresfind(); {"_id":ObjectId("5232344a2ad290346881464a"),"nombre":"Jonathan","apellido":"Wiesel","secciones":[ "Como lo hago", "Noticias"]}{"_id":ObjectId("523236022ad290346881464b"),"nombre":"Oscar","apellido":"Gonzalez","secciones":[ "iOS", "Objective C", "NodeJS"],"socialAdmin":true}{"_id":ObjectId("5232383a2ad290346881464c"),"nombre":"Alberto","apellido":"Grespan","secciones":"Git","genero":"M"}
Notemos que la búsqueda nos arroja los objetos resultantes, en este caso los documentos de los 3 autores que insertamos acompañados del identificador único que crea MongoDB, este campo _id
se toma además como indice por defecto.
Si lo deseas puedes manualmente especificar el valor del campo
_id
cuando estas insertando los registros con el comandodb.coleccion.insert()
; sin embargo ten en cuenta que debes asegurar que este valor sea único, de lo contrario los registros con dicho campo duplicado resultarán en error por clave primaria duplicada.Una búsqueda como la anterior sería similar en SQL a:
SELECT * FROM autores
Filtros
Digamos que ahora queremos hacer la búsqueda pero filtrada por los algún parámetro. Para esto sólo debemos pasar el filtro deseado a la función find()
, busquemos a los administradores sociales para probar:
123 >dbautoresfind({socialAdmin:true}); {"_id":ObjectId("523236022ad290346881464b"),"nombre":"Oscar","apellido":"Gonzalez","secciones":[ "iOS", "Objective C", "NodeJS"],"socialAdmin":true}
En SQL sería similar a:
SELECT * FROM autores WHERE socialAdmin = true
Probemos ahora filtrar por varias condiciones, primero probemos con filtros donde TODOS se deben cumplir:
> db.autores.find({ genero: 'M', secciones: 'Git' }); { "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido" : "Grespan", "secciones" : "Git", "genero" : "M" }123 >dbautoresfind({genero:'M',secciones:'Git'}); {"_id":ObjectId("5232383a2ad290346881464c"),"nombre":"Alberto","apellido":"Grespan","secciones":"Git","genero":"M"}
Es importante destacar que si el documento resultante hubiese tenido en la propiedad
secciones
un arreglo en lugar de una cadena de caracteres, si dicho arreglo tuviese el valorGit
también cumple la condición.En SQL sería similar a:
SELECT * FROM autores WHERE genero = 'M' AND secciones = 'Git'
Veamos ahora un ejemplo un poco más avanzado de filtros con condiciones donde queremos que solo ALGUNA de ellas se cumpla:
> db.autores.find({ $or: [ {socialAdmin : true}, {genero: 'M'} ] }); { "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" : "Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" : true } { "_id" : ObjectId("5232383a2ad290346881464c"), "nombre" : "Alberto", "apellido" : "Grespan", "secciones" : "Git", "genero" : "M" }123456789 >dbautoresfind({ $or:[ {socialAdmin:true}, {genero:'M'} ]}); {"_id":ObjectId("523236022ad290346881464b"),"nombre":"Oscar","apellido":"Gonzalez","secciones":[ "iOS", "Objective C", "NodeJS"],"socialAdmin":true}{"_id":ObjectId("5232383a2ad290346881464c"),"nombre":"Alberto","apellido":"Grespan","secciones":"Git","genero":"M"}
En este caso estamos filtrando por aquellos autores que son administradores sociales ó aquellos que tengan el campo género con el carácter M.
En SQL sería similar a:
SELECT * FROM autores WHERE socialAdmin = true OR genero = 'M'
Limitar y Ordenar
Si quisiéramos limitar los resultados a un número máximo especificado de registros es tan fácil como agregar .limit(#)
al final del comando .find()
:
123 >dbautoresfind()limit(1) {"_id":ObjectId("5232344a2ad290346881464a"),"nombre":"Jonathan","apellido":"Wiesel", "secciones":[ "Como lo hago", "MongoDB"]}
En SQL sería similar a:
SELECT * FROM autores LIMIT 1
La misma modalidad sigue la funcionalidad de ordenar los registros por un campo en particular, el cual servirá de argumento a la función .sort()
:
12345 >dbautoresfind()sort({apellido:1}) {"_id":ObjectId("523236022ad290346881464b"),"nombre":"Oscar","apellido":"Gonzalez","secciones":[ "iOS", "Objective C", "NodeJS"],"socialAdmin":true}{"_id":ObjectId("5232383a2ad290346881464c"),"nombre":"Alberto","apellido":"Grespan","secciones":"Git","genero":"M"}{"_id":ObjectId("5232344a2ad290346881464a"),"nombre":"Jonathan","apellido":"Wiesel","secciones":[ "Como lo hago", "MongoDB"]}
El número 1 que acompaña al argumento de ordenamiento es el tipo de orden,
1
para descendiente y-1
para ascendenteEn SQL sería similar a:
SELECT * FROM autores ORDER BY apellido DESC
También podemos combinar ambas funciones tan solo llamando una después de otra:
> db.autores.find().sort({apellido : 1}).limit(1) { "_id" : ObjectId("523236022ad290346881464b"), "nombre" : "Oscar", "apellido" : "Gonzalez", "secciones" : [ "iOS", "Objective C", "NodeJS" ], "socialAdmin" : true }123 >dbautoresfind()sort({apellido:1})limit(1) {"_id":ObjectId("523236022ad290346881464b"),"nombre":"Oscar","apellido":"Gonzalez","secciones":[ "iOS", "Objective C", "NodeJS"],"socialAdmin":true}
Otros filtros
Existen varios operadores más para filtrar las búsquedas; eso lo dejaremos para más adelante para no sobrecargarte de información tan rápido, pero no te preocupes que no lo pasaremos por alto.
Eliminación de registros - .remove()
y .drop()
Si entendiste como buscar registros pues eliminarlos es igual de fácil. Para esto existen 4 posibilidades:
- Eliminar los documentos de una colección que cumplan alguna condición.
- Eliminar todos los documentos de una colección.
- Eliminar la colección completa.
Probemos eliminandome a mí de la colección de autores:
> db.autores.remove({ nombre: 'Jonathan' });1 >dbautoresremove({nombre:'Jonathan'});
En SQL sería similar a:
DELETE FROM autores WHERE nombre = 'Jonathan'
¿Fácil no?. Eliminemos ahora a los demás autores:
> db.autores.remove();1 >dbautoresremove();
En SQL sería similar a:
DELETE FROM autores
Ahora que la colección ha quedado vacía deshagamonos de ella:
> db.autores.drop();1 >dbautoresdrop();
En SQL sería similar a:
DROP TABLE autores
Conclusión
Seguramente te estarás preguntando: ¿Y qué pasó con los update
?. La modificación de registros involucra múltiples maneras para que puedas manipular la información a tu gusto, por ello lo dejaremos para la próxima entrada, no desesperes. Estos son los primeros pasos a tomar para que comiences a usar MongoDB, todavía queda un largo camino por delante ya que hay mucho que aprender sobre esta magnifica solución de base de datos.