Hostingheaderbarlogoj
Join InMotion Hosting for $3.49/mo & get a year on Tuts+ FREE (worth $180). Start today.
Advertisement

Introducción a MongoDB - Parte 1

by

Spanish (Español) translation by Joshua Aranda (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.

The MongoDb link to downloads

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

The MongoDb download options

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:

The MongoDb shell

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

	db.nettuts.insert({
		first: 'matthew',
		last: 'setter',
		dob: '21/04/1978',
		gender: 'm',
		hair_colour: 'brown',
		occupation: 'developer',
		nationality: 'australian'
	});
			db.nettuts.insert({
		first: 'james',
		last: 'caan',
		dob: '26/03/1940',
		gender: 'm',
		hair_colour: 'brown',
		occupation: 'actor',
		nationality: 'american'
	});
	db.nettuts.insert({
		first: 'arnold',
		last: 'schwarzenegger',
		dob: '03/06/1925',
		gender: 'm',
		hair_colour: 'brown',
		occupation: 'actor',
		nationality: 'american'
	});
	db.nettuts.insert({
		first: 'tony',
		last: 'curtis',
		dob: '21/04/1978',
		gender: 'm',
		hair_colour: 'brown',
		occupation: 'developer',
		nationality: 'american'
	});
	db.nettuts.insert({
		first: 'jamie lee',
		last: 'curtis',
		dob: '22/11/1958',
		gender: 'f',
		hair_colour: 'brown',
		occupation: 'actor',
		nationality: 'american'
	});
	db.nettuts.insert({
		first: 'michael',
		last: 'caine',
		dob: '14/03/1933',
		gender: 'm',
		hair_colour: 'brown',
		occupation: 'actor',
		nationality: 'english'
	});
	db.nettuts.insert({
		first: 'judi',
		last: 'dench',
		dob: '09/12/1934',
		gender: 'f',
		hair_colour: 'white',
		occupation: 'actress',
		nationality: 'english'
	});

¿Todo bien? Excelente! Para confirmar que la base de datos y los registros que lo acompañan han sido creados, escribe el siguiente comando:

db.nettuts.find()

Si todo salió como estaba previsto, a continuación podrás ver el resultado siguiente:

Finding all records

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., an AND
  • especificar criterios CAN optionally match. i.e., an OR
  • 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:

db.nettuts.find({gender: 'f'});

Aquí nosotros especificamos que el genero debe ser igual a 'f'.

Corriendo ese comando devolverá la siguiente salida:

Finding all female records

¿Qué si quisiéramos buscar actores masculinos? Sólo ejecuta el siguiente comando:

db.nettuts.find({gender: 'm'});

Tendremos el siguiente resultado:

Finding all male records

Buscando con múltiples criterios

Demos un paso a un nivel superior. Busquemos actores masculinos que son ingleses.

db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}]});

Corriendo ese comando devolverá la siguiente salida:

Finding all male English records

¿Qué pasa con los actores masculinos que son ingleses o americanos. ¡Fácil! Vamos a ajustar nuestro comando anterior para incluir a los americanos:

db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]});

Para esa búsqueda, nosotros veremos el siguiente resultado:

Finding all male English or American records

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:

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.

Finding all male English or American records sorted by nationality

¿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.

db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).sort({nationality: -1, first: 1});

Esta vez recuperar los siguientes resultados:

Finding all male English or American records sorted by nationality first and first name second

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:

db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2);

A partir de ese comando, obtendremos el siguiente resultado:

Limit output to 2 records

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:

db.nettuts.find({gender: 'm', $or: [{nationality: 'english'}, {nationality: 'american'}]}).limit(2).skip(2);

Ejecutando lo anterior no devolverá el siguiente resultado:

Limit output to the 3rd and 4th records

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:

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.

db.nettuts.find({first: 'james', last: 'caan'});

Después de esto, veremos el siguiente resultado:

Update record

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:

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.

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.

	db.nettuts.remove();
	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.

Remove all records

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í.

Advertisement