() translation by (you can also view the original English article)
Estás listo para comenzar a aprender acerca de MongoDB, una de las tecnologías con más auge para los desarrolladores web?
En esta nueva serie, que irá desde principiante hasta profesional seras capaz de utilizar Mongo tan fácilmente como MySQL en tus aplicaciones web. Pero primero, echemos un vistazo a lo básico.
¿Por qué MongoDB?
¿Qué pasa si pudieras almacenar los modelos programáticos exactamente igual como tu los modelas?
En el desarrollo orientado a objetos, nos animan a abordar el desarrollo de código a través de modelos lógicos, para que podamos más fácilmente conceptualizar en nuestra mente. Cuando hacemos esto, estamos en mejores condiciones de discernir las operaciones lógicas que se utilizan para interactuar con la información que contendría en diferentes momentos.
¿Qué pasa si pudieras almacenar los modelos programáticos exactamente igual como tu los modelas? ¿Y si pudieras guardarlos como son en lugar de en una serie de filas de tablas? Al aprender acerca de MongoDB, seras va a ser capaz de hacer eso!
En esta serie, vamos a aprender de todo, desde los conceptos básicos de MongoDB, como la creación, actualización y eliminación de bases de datos y registros, realizar búsquedas complejas de datos y minería de datos primaria con MapReduce. Así que, sin más - vamos a empezar!
Nota: Este tutorial se realiza desde la perspectiva del sistema basado en NIX; Mac OSX, Linux BSD y así sucesivamente. Pero debes ser capaz de seguir los pasos bastante bien si tienes Windows.
Paso 1 : Instalando Mongo
Bien, aquí es donde empieza la diversión. Vamos a empezar con la instalación de Mongo. Ve al sitio web de MongoDB y haz clic sobre el enlace de descarga.



Esto te llevará a una página donde podrás revisar tu plataforma y la arquitectura.



Este tutorial sólo cubre versiones estables, por lo que no es recomendable tomar una nightly build. Una vez que se haya descargado, instálalo según las necesidades de tu plataforma.
Si estás en una máquina de Nix, por favor, utiliza el gestor de paquetes para instalar la última versión en tu plataforma.
Con eso fuera del camino, toma tu terminal y escribe mongo
. Eso abrirá la consola mongo y te permitirá seguir en curso. Si todo va bien, verás una salida similar a esta:



Si tu ves eso, entonces estás listo para seguir.
Paso 2 : Creando una Base de Datos/Insertando Registros
Inicialmente, no se crea ninguna base de datos. Pero no te preocupes, que van a ser creados al instante cuando empezamos a insertar nuestros registros. Copiar el contenido a continuación y pegarlo en su terminal mongo
1 |
|
2 |
db.nettuts.insert({
|
3 |
first: 'matthew',
|
4 |
last: 'setter',
|
5 |
dob: '21/04/1978',
|
6 |
gender: 'm',
|
7 |
hair_colour: 'brown',
|
8 |
occupation: 'developer',
|
9 |
nationality: 'australian'
|
10 |
}); |
11 |
db.nettuts.insert({
|
12 |
first: 'james',
|
13 |
last: 'caan',
|
14 |
dob: '26/03/1940',
|
15 |
gender: 'm',
|
16 |
hair_colour: 'brown',
|
17 |
occupation: 'actor',
|
18 |
nationality: 'american'
|
19 |
}); |
20 |
db.nettuts.insert({
|
21 |
first: 'arnold',
|
22 |
last: 'schwarzenegger',
|
23 |
dob: '03/06/1925',
|
24 |
gender: 'm',
|
25 |
hair_colour: 'brown',
|
26 |
occupation: 'actor',
|
27 |
nationality: 'american'
|
28 |
}); |
29 |
db.nettuts.insert({
|
30 |
first: 'tony',
|
31 |
last: 'curtis',
|
32 |
dob: '21/04/1978',
|
33 |
gender: 'm',
|
34 |
hair_colour: 'brown',
|
35 |
occupation: 'developer',
|
36 |
nationality: 'american'
|
37 |
}); |
38 |
db.nettuts.insert({
|
39 |
first: 'jamie lee',
|
40 |
last: 'curtis',
|
41 |
dob: '22/11/1958',
|
42 |
gender: 'f',
|
43 |
hair_colour: 'brown',
|
44 |
occupation: 'actor',
|
45 |
nationality: 'american'
|
46 |
}); |
47 |
db.nettuts.insert({
|
48 |
first: 'michael',
|
49 |
last: 'caine',
|
50 |
dob: '14/03/1933',
|
51 |
gender: 'm',
|
52 |
hair_colour: 'brown',
|
53 |
occupation: 'actor',
|
54 |
nationality: 'english'
|
55 |
}); |
56 |
db.nettuts.insert({
|
57 |
first: 'judi',
|
58 |
last: 'dench',
|
59 |
dob: '09/12/1934',
|
60 |
gender: 'f',
|
61 |
hair_colour: 'white',
|
62 |
occupation: 'actress',
|
63 |
nationality: 'english'
|
64 |
}); |
¿Todo bien? Excelente! Para confirmar que la base de datos y los registros que lo acompañan han sido creados, escribe el siguiente comando:
1 |
db.nettuts.find()
|
Si todo salió como estaba previsto, a continuación podrás ver el resultado siguiente:



Esto demuestra que todos los registros fueron creados en la base de datos. Una cosa a tener en cuenta antes de ir más lejos es el campo de id
. Este es auto-generado por Mongo para ti, si tu no especificas un id. La razón es que cada registro debe tener un único campo id
.
Se puede ver que tenemos un registro para cada uno de los que insertamos – ahora estamos listos para iniciar la consulta de ellos.
Paso 3 : Buscando por Registro
¿Te acuerdas del comando anterior? Busca y muestra cada registro en la base de datos. Útil, sí, pero ¿Cómo ser más específico? ¿Cómo encontrar a todos los agentes femeninos, filtrando los masculinos? Esa es una buena pregunta y la respuesta es selectores.
Selectores
Los selectores son para Mongo lo que where
es para SQL. Al igual que con where, los selectores en Mongo nos permiten hacer lo siguiente:
- especificar criterios
MUST
match. i.e., anAND
- especificar criterios
CAN
optionally match. i.e., anOR
- especificar criterios
MUST
exist - y mucho más...
Registros MUST
Vamos a empezar con un selector básico. Decimos que queremos encontrar todos los actores que son femeninos
.
Para lograrlo, tendrá que ejecutar el siguiente comando:
1 |
db.nettuts.find({gender: 'f'}); |
Aquí nosotros especificamos que el genero debe ser igual a 'f'.
Corriendo ese comando devolverá la siguiente salida:



¿Qué si quisiéramos buscar actores masculinos? Sólo ejecuta el siguiente comando:
1 |
db.nettuts.find({gender: 'm'}); |
Tendremos el siguiente resultado:



Buscando con múltiples criterios
Demos un paso a un nivel superior. Busquemos actores masculinos que son ingleses.
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}]}); |
Corriendo ese comando devolverá la siguiente salida:



¿Qué pasa con los actores masculinos que son ingleses o americanos. ¡Fácil! Vamos a ajustar nuestro comando anterior para incluir a los americanos:
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}); |
Para esa búsqueda, nosotros veremos el siguiente resultado:



Paso 4 : Ordenar Registros
¿Qué pasa si queremos ordenar los registros, por ejemplo por el nombre o nacionalidad? Al igual que en SQL, Mongo ofrece el comando sort
. El comando find
tiene una lista de opciones para determinar el orden de clasificación.
A diferencia de SQL, especificamos que sea ascendente y descendente de manera diferente. Lo hacemos de la siguiente manera:
- Ascending: -1
- Descending: 1
Vamos a echar un vistazo a un ejemplo:
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1}); |
Este ejemplo recupera todos los masculinos, ingleses o americanos, actores y los ordena de forma descendente mediante la nacionalidad.



¿Qué pasa con la clasificación por nacionalidad en orden descendente y nombre en orden ascendente? No hay problema! Echa un vistazo a la siguiente consulta, que es una versión modificada del último que corrimos.
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1, first: 1}); |
Esta vez recuperar los siguientes resultados:



Se puede ver que esta vez Arnold Schwarzenegger se coloca antes que Tony Curtis.
Paso 5 : Limitar Registros
¿Qué pasaría si tuviéramos un conjunto de datos bastante grande (por suerte, no lo tenemos) y queremos limitar los resultados a sólo 2? Mongo proporciona el comando limit, similar a MySQL y nos permite hacer precisamente eso. Vamos a actualizar nuestra consulta anterior y devolveremos sólo 2 registros. Echa un vistazo a el siguiente comando:
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2); |
A partir de ese comando, obtendremos el siguiente resultado:



Si queríamos el tercer y cuarto registro, es decir, pasar por alto los dos primeros? De nuevo, Mongo tiene una función para eso. Echa un vistazo a una mayor personalización de la orden anterior:
1 |
db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2).skip(2); |
Ejecutando lo anterior no devolverá el siguiente resultado:



Se puede ver en el resultado original que los dos primeros fueron omitidos.
Paso 6 : Actualizando Registros
Como era de esperar, Mongo proporciona una opción para actualizar los registros también. Al igual que con el método find
y consultas SQL, se necesita especificar el criterio para el registro que quieres modificar, a continuación, los datos de ese registro que se va a modificar.
Digamos que tenemos que actualizar el registro de James Caan especificando que su cabello es de color gris, no café. Necesitamos correr la función de actualizar. Echa un vistazo a el siguiente ejemplo:
1 |
db.nettuts.update({first: 'james', last: 'caan'}, {$set: {hair_colour: 'brown'}}); |
Ahora, al ejecutar este comando, si todo va bien no habrá nada que indique si fue un éxito o un fracaso. Para saber si el registro fue correctamente actualizado, tenemos que buscarlo. Así que vamos a hacer eso.
1 |
db.nettuts.find({first: 'james', last: 'caan'}); |
Después de esto, veremos el siguiente resultado:



Esto muestra que la actualización se ha realizado. Una palabra de precaución, si no pasa en la modificación $set
, entonces reemplazaras el registro, si está disponible actualizalo. Se muy cuidadoso!
Paso 7 : Eliminando Registros
Creo que a estas alturas, realmente has empezado a tener idea de como trabajar con Mongo. Así es, si se quiere eliminar un registro sólo se tiene que pasar un conjunto de selectores, como también se haría con SQL para determinar el conjunto de registros que se desea eliminar. Si no lo haces eliminarás todos los registros - y la base de datos.
Así que, vamos a decir que no queremos James Caan en nuestra lista de actores. Vamos a eliminarlo de la base de datos utilizando el siguiente comando:
1 |
db.nettuts.remove({first: 'james', last: 'caan'}); |
Al igual que con la actualización, no se proporciona ninguna salida visible para indicar si hemos tenido éxito o no - por lo que vamos a hacer una búsqueda para comprobarlo.
1 |
db.nettuts.find({first: 'james', last: 'caan'}); |
Después de esto, se debe nota que no hay resultados. Si eso es lo que has encontrado, entonces hemos borrado satisfactoriamente James Caan de nuestra base de datos. Pero ¿Qué hay si queremos eliminar todos los registros de la base de datos?
Bueno, para hacer eso, basta con retirar los selectores de la llamada anterior, como lo haremos a continuación.
1 |
|
2 |
db.nettuts.remove(); |
3 |
db.nettuts.find(); |
Después de ejecutar los dos comandos anteriores, no veremos ninguna salida, lo que indica que la base de datos con todos los registros ha sido eliminada.



Conclusión
En esta rápida introducción al uso de MongoDB mirábamos:
- ¿Qué es Mongo?
- ¿Cómo instalarlo?
- ¿Cómo crear, buscar, actualizar y eliminar registros?
Con este conocimiento, puedes comenzar la práctica y aprender más acerca de esta maravillosa tecnología. Si deseas más información, no dudes en revisar la página de MongoDb o seguir @mongodb en Twitter.
En el siguiente tutorial, vamos a empezar a aprender más acerca de consultas complejas. Así que atentos y muchas gracias por leer.
Actualización: La segunda parte de esta serie se puede encontrar aquí.
¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!