MongoDB – Querying I

BI Geek / Big Data  / MongoDB – Querying I
MongoDB querying

MongoDB – Querying I

En entradas anteriores se expuso de forma introductoria MongoDB explicando sus características generales. Esta entrada mostrará cómo realizar las acciones típicas con una base de datos como inserción, actualización, eliminación y búsquedas de registros en MongoDB. Además se llevará un esquema que permita al lector poder ir realizando los ejemplos.

 

Inserciones de documentos en MongoDB

Uno de los métodos más básicos en MongoDB es la inserción de documentos. Para ello, se utiliza la sentencia insert:

db.greeting.insert({"greeting": "Hola Mundo"})

Al ejecutar este comando, MongoDB automáticamente crea la base de datos y la colección e inserta en ella el documento.

En caso de querer realizar múltiples inserciones, MongoDB provee de un método denominado batchInsert al que se le puede pasar un conjunto de documentos y estos serán insertados de manera secuencial.

db.greeting.bachInsert([{"greeting": "Hola Mundo"},{"greeting": "Hola a todos"}])

En caso de que se encuentre algún error durante las inserciones, el proceso termina y dejará sin insertar el resto de documentos. Para ignorar esto, se puede modificar el valor del parámetro continueOnError.

 

Eliminaciones de documentos

Para la eliminación de documentos se utiliza el método remove:

db.greeting.remove()

Si aplicamos el método remove sobre una colección sin especificar ningún parámetro, este eliminará todos los documentos existentes en la colección. Esto no elimina la colección.

El método remove puede tomar una query como parámetro permitiendo así eliminar los documentos que cumplan con este filtrado.

db.greeting.remove({"greeting": "Hola Mundo"})

En caso de querer eliminar todos los documentos existentes en una colección, la forma más eficiente es eliminarla y recrear los índices necesarios.

db.greeting.drop()

 

Actualizaciones de documentos

Uno de los aspectos básicos en una base de datos es poder modificar datos almacenados y para ello MongoDB provee del método update.

El método update recibe dos atributos: una query para filtrar los datos a actualizar y el nuevo documento a insertar.

db.empleados.update({"name": "Jose"}, jose)

En caso de solo querer modificar alguno de los campos y no todo el documento, se pueden utilizar los modificadores (modifiers).

Modifiers

Existen un gran número de modifiers que nos permiten setear nuevos valores a las claves, crear claves, incrementar valores etc. Algunos de ellos son:

$set $unset $inc $push $pop $addToSet
Modifica el valor de un campo Elimina la clave del documento Incrementa o decrementa el valor de una clave o crea la clave si no existe Almacena un nuevo valor en un array Elimina un valor del array Inserta valores en el array si no existen

 

db.empleados.update({"name": "Jose"},{"$set": {"departamento": "Business Intelligence"}})
db.empleados.update({"name": "Jose"},{"$unset": {"departamento": 1}})
db.empleados.update({"name": "Jose"},{"$inc": {"edad": 1}})

Upserts

Los upserts son un tipo especial de actualización que en caso de no encontrar el dato a actualizar, crea este documento combinando el criterio de búsqueda y el de actualización.

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

Por defecto, update solo actualizar el primer documento encontrado, pero modificando el valor de Multi a true, MongoDB actualizará todos los valores de la colección que satisfagan la query.

 

Busquedas de documentos

Find

Find es el método que usa MongoDB para la búsqueda de documentos dentro de una colección. Con este método se obtiene una lista de documentos.

El método find recibe dos parámetros: una query para la búsqueda de documentos y un segundo parámetro con los campos que se quieren obtener en la búsqueda. En caso de que no se inserte el primer parámetro, find devolverá todos los documentos de la colección y en caso de no insertar el segundo se devolverán todos los campos.

db.empleados.find({},{"name":1, "edad":1})
db.empleados.find({"name": "Jose"})

Se puede simular el comando ‘and’ de SQL para añadir más condiciones al filtrado haciendo uso de comas.

db.empleados.find({"name": "Jose", "edad": 20})

Queries con condicionales

Es posible utilizar varios tipos de condiciones en las búsquedas de los documentos además de la igualdad:

$lt,$lte $gt, $gte $ne
Es la condición menor que/menor o igual que Es la condición mayor que/mayor o igual que Condición para encontrar términos distintos

 

f_alta_max= new Date("12/31/2016")
f_alta_min= new Date("01/01/2016")
db.empleados.find({"f_alta" : {"gte": f_alta_min, "$lte" : f_alta_max}})

Mediante la consulta anterior se pueden encontrar los usuarios dados de alta en el 2016. Además se pueden encontrar otras funciones lógicas propias de SQL como: $or, $and y $not.

Null y expresiones regulares

Es importante destacar el uso de null para la realización de queries. Mediante el uso de null, se pueden buscar los documentos cuya clave tiene el valor null asociado, pero también se pueden encontrar aquellos documentos donde la clave no existe.

También se pueden hacer búsquedas mediante el uso de expresiones regulares. En caso de tener almacenada una expresión regular como valor de una clave, también podrá ser encontrada de esta forma.

db.empleados.find({"nombre": /pedro/i, "hijos": null})

 

Conclusiones

MongoDB es un gran sistema de almacenamiento que permite la realización de queries de forma sencilla e intuitiva mediante código en formato json. En este blog se han analizado las queries más básicas que se podrían hacer con MongoDB y en futuros artículos se expondrán la consulta de otros tipos de datos (como arrays, documentos embebidos, etc) además de otras funciones disponibles.

Para más información, consultar la documentación oficial de MongoDB en este enlace.

Consultor Senior en Business Intelligence y Big Data.