Tutorial de MongoDB – Parte 02: Sináxtis de Consultas

Dificultad: Fácil
Tiempo de Lectura: 4 minutos

En el Tutorial de MongoDB: Primeros Pasos, vimos una introducción a MongoDB, realizamos la instalación de este, vimos ademas como iniciarlo y explicamos de forma general como funciona su estructura de datos.

Continuando con este Tutorial de MongoDB, veremos en esta la segunda parte, algunos ejemplos de ejecución de sentencias en la base de datos, insertando, consultando y eliminando registros. Para ello iremos comentando poco a poco cada una de las lineas de comando que debemos ejecutar en cada caso.

Para basarnos en un entorno real, supondremos un sistema de clientes, en el que propondremos realizar altas, recuerda que podemos realizar inserciones con distinta cantidad de campos, tal como vimos en el tutorial anterior, bajas, modificaciones y algunas consultas.

Sintáxis de Consultas en MongoDB

Entre las consultas que realizaremos a la base de datos, veremos la sintaxis de algunas consultas especificas que pueden ser de utilidad en todo desarrollo, como por ejemplo: ordenes, filtros y limites.

 Insertar:

Para comenzar, insertaremos en este caso un cliente con los siguientes datos: su nombre, apellido y edad. La base de datos la llamaremos “clientes”.

db.clientes.insert({Nombre: 'Carlos', Apellidos: 'Garcia Perez', Edad: 36});

Para confirmar si se inserto correctamente este cliente, podremos realizar una búsqueda de todos los registros de la siguiente manera:

db.clientes.find();

Esta sentencia nos devolverá algo como:

{ "_id" : ObjectId("512dc454777b2ff171b49e95"), "Nombre": "Carlos", "Apellidos": "Garcia Perez", "Edad": 36 }

Insertando mas campos

Tal como definimos en la introducción a MongoDB, la estructura que este posee, nos permite añadir datos a registros similares, sin necesidad de modificar nada, lo que seria imposible en MySQL, por ejemplo añadiremos otro usuario “Valentina”, pero esta vez, agregáramos un teléfono para este cliente. En el caso de MySQL, seria necesario reestructurar una tabla, ya que deberíamos agregar una nueva columna, pero en este caso no sera necesario realizar ninguna tarea extra simplemente agregaremos este nuevo cliente de la siguiente manera:

db.clientes.insert({"Nombre": "Valentina", "Apellidos": 'Garcia Perez', "Edad": 20, "Telefono": 123456789 });

Consultas:

La consulta básica, es decir, el listado de los datos que existen en esta base de datos podemos obtenerlo de la siguiente manera:

db.clientes.find();

Las búsquedas por defecto son case sensitive, es decir que son sensibles a mayúsculas y minúsculas, en caso que busquemos carlos en lugar de “Carlos”, obtendremos como resultado que no existe, probemos lo siguiente:

db.clientes.find({Nombre: 'carlos'});

Para evitar el case sensitive, podemos utilizar la siguiente sintaxis:

db.clientes.find({Nombre: /^carlos$/i});

Filtros:

Al igual que en MySQL, esta base de datos permite busquedas mediante el agregadod e filtros como por ejemplo filtrar por algun campo en especifico.

Si nos interesara filtrar la búsqueda por el nombre de cliente, podemos utilizar lo siguiente:

db.clientes.find({Nombre: 'Carlos'});

A continuación  tomemos el ejemplo de que nos interesa obtener los clientes mayores a 25 años:

db.clientes.find({Edad: {$gt: 25} } );

Aquí nos devolverá únicamente a Jose, ya que es el mayor a 25 años.

 

En este otro ejemplo supondremos buscar empleados de entre 36 y 38 años. Aquí obtendremos los dos clientes que hemos insertado ya que están dentro del rango que seleccionamos.

db.clientes.find({$or: [{Edad: 36}, {Edad: 38}]} );

 

Ahora plantearemos el siguiente ejemplo, insertar un nuevo cliente “Pedro Garcia Perez”, el tiene 39 años, es de Madrid España, es cliente hace 3 años, y cuenta con servicio de hosting y pagina web. Por otro lado, insertaremos al cliente “Jose Lopez Sanchez”, el tiene 45 años, es de Madrid España, es cliente hace 2 años y cuenta únicamente con el servicio de hosting.

Para ello ejecutaremos la siguiente sentencia:

db.clientes.insert({_id: '10000000L', Nombre: 'Pedro', Apellidos: 'Garcia Perez', antiguedad: 3, Direccion: {city: 'mad', country: 'es'}, Servicios: ['Hosting', 'Sitio Web']} );
db.clientes.insert({_id: '20000000L', Nombre: 'Jose', Apellidos: 'Lopez Sanches', antiguedad: 2, Direccion: {city: 'mad', country: 'es'}, Servicios: ['Hosting']} ):

 

En este momento disponemos de 4 clientes en nuestra base de datos, lo que nos permitira probar busquedas mas especificas. Intentemos las siguientes consultas:

Obtener los clientes que tienen servicio de Sitio Web:

db.clientes.find({Servicio: 'Sitio Web'});

 

Obtener los clientes que No tienen un servicio asociado.

db.clientes.find({Servicios: {$exists: false}});

 

En ocasiones, principalmente estructuras grandes, resulta difícil visualizar los datos, para verlos mas ordenadamente podemos utilizar .pretty():

db.clientes.find({Nombre: 'Carlos'}).pretty();

 

Ordenar una consulta:

Para obtener los resultados de una consulta, en forma ordenada, basándose en alguno de los campos, podemos realizarlo de esta forma:

db.clientes.find().sort({antiguedad: -1});

 

En caso de querer limitar el resultado de una consulta, podemos ejecutar lo siguiente:

db.clientes.find({Servicios: 'Hosting'}).limit(2);

 

Contar cantidad de registros

db.clientes.count();

 

Supongamos ahora que queremos obtener los clientes que viven en una dirección en particular, en este caso ciudad de Madrid (mad):

db.clientes.find({'Direccion.ciudad': 'mad'});

Modificar

Para comenzar con un caso básico de modificación, podemos intentar modificar el Nombre según un id de cliente:

db.clientes.update({_id: '20000000L'}, {$set: {Nombre: 'Eduardo'}}):

 

Ahora vamos a sumar 1 año de antiguedad a este cliente y ademas le agregaremos un servicio

db.clientes.update({_id: '20000000L'}, {$inc: {antiguedad: 1}, $push: {Servicios: 'Administración'}});

Eliminar

A continuación veremos dos de los típicos casos de eliminación, uno la eliminación total de los registros y dos eliminar un registro por ID.

Eliminando todos los registros de la base de datos  “clientes”:

db.clientes.remove();

Eliminando el cliente con id: 10000000L:

db.clientes.remove({_id: '10000000L'});

 

Conclusión

Hasta el momento hemos visto como instalar MongoDB, su estructura  y puesta en funcionamiento, ahora ya tienes los conocimientos necesarios para realizar pruebas y montar un proyecto propio utilizando esta base de datos NoSQL.

Cabe destacar que hoy en día, podemos encontrar muchos tutoriales en Internet, pero estos solo dan herramientas básicas sin explicar mucho como pueden ser utilizados. Con esta segunda entrega vimos de forma real, las sentencias que podemos llegar a necesitar en todo proyecto.

En el próximo tutorial repasaremos algunas de estas consultas y profundizaremos en ellas. Si te gusto y fue de ayuda este articulo hasta el momento, no olvides de seguir MongoDB Tutorial: Parte 03


¿Te resultó útil el artículo? Compártelo con tus colegas: