Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TEMA
Métodos de Captura y Almacenamiento de la Información
Esquema
Ideas clave
Este tema se centra en los comandos básicos para manipular datos en MongoDB. La
lectura de las Ideas clave te ayudará a conocer la sintaxis de los comandos
utilizados para crear, listar y modificar datos.
Para interactuar con el sistema de base de datos MongoDB se utiliza la consola, la cual
se inicia ejecutando el programa Mongo. Es necesario que antes de iniciar la consola se
inicie el demonio, mongod. El demonio es el encargado de escuchar y servir las
peticiones. El lenguaje de programación utilizado en la consola es JavaScript.
También es posible indicar un nombre de base de datos como argumento del ejecutable
mongo. Por ejemplo, para obtener el mismo resultado que en el ejemplo anterior se
ejecutaría el comando mongo tienda desde la línea de comandos del sistema operativo.
Es conveniente aclarar que no es necesario que la base de datos tienda exista para poder
utilizarla. MongoDB se encargará de crear la base de datos y las collections apropiadas
cuando el usuario añada nuevos documentos en la misma. Este detalle va en la línea de
naturaleza dinámica de este sistema de bases de datos.
http://www.mongodb.org/downloads
» Una vez instalada una de las versiones, se crea un folder en la ruta C:\data\db
Para interactuar con MongoDB, no solo se dispone de la consola para poder interactuar
con la base de datos. Han aparecido un grupo de aplicaciones con entorno gráfico, tanto
propietarias de MongoDB como externas, que facilitan enormemente el uso de esta base
de datos, llegando a cubrir muchas de sus funcionalidades.
MongoBooster
MongoBooster incluye un lector Shell para hacer de MongoDB un poco más fácil.
También tiene una utilidad para crear colecciones de forma aleatoria. Posee
herramientas de monitorización y estadísticas entre otras.
MongoBooster tiene varias versiones de pago, pero dispone de una gratuita con ciertas
limitaciones:
MongoDB Compass
MongoDB Compass analiza los documentos y muestra sus estructuras dentro de sus
colecciones a través de una GUI intuitiva. Permite visualizar y explorar rápidamente
esquema para comprender la frecuencia, tipos y rangos de campos en su conjunto de
datos.
Ofrece estadísticas del servidor en tiempo real, permitiendo conocer las métricas del
servidor y las operaciones de la base de datos. Explora las operaciones de la base de datos
y ayuda a detectar las colecciones más activas.
Permite crear y modificar las reglas de validación de datos usando una simple interfaz.
El soporte CRUD permite corregir problemas de calidad de datos en documentos
individuales.
MongoDB tiene un esquema flexible, donde no es necesario que las colecciones tengan
una estructura idéntica para todos los documentos. Esto significa que los documentos de
la misma colección no necesitan tener el mismo número de campos o estructura. Cada
documento solo necesita contener un número relevante de campos de la entidad u objeto
que el documento representa.
{
"_id" : ObjectId("632c5d85cd35c62d58e36378"),
"name" : "Fernado Alonso",
"age" : 35,
"deportes" : [
"Forumula 1",
"Indi"
],
CampeonatosMundiales: 2,
"hobbies": [
"Ciclismo",
"Fútbol"
]
},
{
"_id" : ObjectId("632c5d85cd35c62d58e11254"),
"name" : "Mark Webber",
"age" : 40,
"deportes" : [
"Fórumula 1",
"Prototipos"
],
"hobbies": [
"Cine",
"Montañismo"
]
}
db.<nombre de collection>.insert(<documento a almacenar>)
Por ejemplo, si se desea crear un nuevo documento con información sobre un producto
en específico, dentro de la collection llamada productos, el comando sería el siguiente:
db.productos.insert({nombre: “Jabón líquido”, precio: 5.50})
Este documento creado por este comando tiene dos atributos: nombre y precio. Además,
MongoDB crea un atributo especial llamado _id de tipo ObjectId, el cual es un tipo
especial de 12 bytes. _id es utilizado para garantizar la unicidad de los documentos en
una collection.
El _id también puede indicarse como parte del documento a crear. En el caso de que el
identificador ya exista, el comando insert retornará un error, como se muestra en el
siguiente ejemplo.
Otro comando para crear documentos es el comando save, con la siguiente sintaxis:
db.<nombre de collection>.save(<documento a almacenar>)
Las consultas son los mecanismos utilizados en bases de datos para leer u obtener
datos. En el caso de MongoDB, las consultas solamente pueden obtener datos de una sola
collection. El comando utilizado en MongoDB para realizar consultas es find, con la
siguiente sintaxis:
db.<nombre de collection>.find(<criterios de búsqueda>, <proyección>)
» $gt, $gte, $lt, $lte, $ne: Para la evaluación de condiciones «mayor que», «mayor o
igual que», «menor que», «menor o igual que» y «es diferente a».
Además, pueden utilizarse los operadores lógicos $or, $and, $not y $nor, los cuales
reciben un array de expresiones a evaluar en conjunto. MongoDB también brinda
operadores para búsquedas de información geoespacial.
La siguiente captura muestra el ejemplo básico del comando find, mostrando todos los
atributos de los documentos en la collection productos.
El siguiente ejemplo muestra todos los productos con el atributo precio exactamente
igual a 1.
Mientras que en el siguiente ejemplo se muestran tres consultas. La primera muestra los
productos con precio menor o igual que 1. La segunda muestra los productos que
cumplen la condición de tener precio mayor que 1 y menor que 2. La tercera consulta
retorna el mismo resultado que la segunda, pero utilizando el operador $and.
Todos los ejemplos previos han mostrado los documentos completos. El siguiente
ejemplo muestra solamente el atributo nombre para la última consulta.
» sort: Indica, a través de pares clave-valor donde la clave es el atributo sobre el que se
ordenará y el valor es 1 para un orden ascendente y -1 para un orden descendente.
El siguiente ejemplo muestra el uso de sort y limit para mostrar el producto con mayor
precio en la collection.
Los criterios de búsqueda del comando update siguen las reglas indicadas para el
comando find. Por defecto, el documento que cumpla con esos criterios se reemplaza
por el documento enviado como segundo argumento. Si lo deseado es realizar un cambio
específico se pueden utilizar los siguientes operadores:
El siguiente ejemplo muestra el uso del comando update para cambiar el precio de todos
los productos con precio mayor o igual a 2 a un fijo de 3.
Para finalizar, se va a mostrar una serie de casos prácticos donde se podrán ver muchas
de las funcionalidades aprendidas. Se va a partir de una colección que almacene datos de
libros. Un ejemplo de registro es el que se puede ver a continuación:
{
"_id" : ObjectId("592e9046a379649dfb5f268e"),
"ISBN" : 195153448,
"Title" : "Classical Mythology",
"Author" : "Mark P. O. Morford",
"Year" : 2002,
"Publisher" : "Oxford University Press"
}
Para iniciar las consultas se va a mostrar los 3 primeros registros con un simple comando
find para buscar y limit(3) para restringir el número de búsquedas a 3. Para ello
ejecutamos db.books.find().limit(3). El resultado es el que se puede ver a
continuación:
Antes de trabajar con los filtros, se van a sacar todos los autores que tiene disponible la
base de datos. Para ello se utiliza el comando distinct.
Para realizar búsquedas utilizando el comando distinct, hay que aplicar el filtro en el
segundo parámetro de la función como se puede ver a continuación:
Obtenido los autores, se va a filtrar por uno de ellos y se van a mostrar los campos
«ISBN», «Book-Title» y «Book-Author». Nótese, que la opción se utiliza la opción a 0 de
ocultado se utiliza sólo para el campo _id y la opción a 1 para los campos que se quieren
mostrar.
Se puede ver que es muy sencillo realizar una búsqueda con contenido exacto, pero si
quiere hacer una búsqueda con contenido parcial es necesario utilizar el operador $regex
(regular expression).
A continuación, se realiza una búsqueda con aquellos títulos que tengan contenida la
palabra «Night»:
Se comprueba que todo ha funcionado. Para ello es necesario realizar una nueva consulta
buscando un elemento dentro de un Array. Para realizar este tipo de búsquedas se utiliza
el operador $in, el cual realiza una búsqueda por los elementos especificados como
parámetros en un Array, como se puede ver a continuación para aquellos libros que tenga
el tag «Night»:
Para volver a dejar todo como estaba en un principio, se utiliza el operador $unset para
borrar el atributo especificado, que en este caso será «tags»:
Para terminar, si se quiere realizar una búsqueda en la que se pretende busca los libros
de 2 autores diferentes, es necesario especificarlos dentro de un array inicializado por el
operado $or como se puede ver a continuación:
Lo + recomendado
Lecciones magistrales
No dejes de leer…
Chodorow, K. & Dirolf, M. (2010). MongoDB: The Definitive Guide. California: O’Reilly.
Accede a una parte del libro desde el aula virtual o a través de la siguiente dirección web:
http://books.google.es/books?id=uGUKiNkKRJ0C&printsec=frontcover
No dejes de ver…
Introducción a MongoDB
La introducción a MongoDB
presentada durante los primeros 6
minutos de este vídeo incluye una
breve descripción de las
características del sistema. También
presentan un ejemplo con las
diferencias entre bases de datos
relacionales y MongoDB.
+ Información
A fondo
En esta sección del Tutorial MongoDB se presentan ejemplos de consultas que incluyen
operadores de comparación, operadores de existencia de atributos y operadores lógicos.
Accede a los artículos desde el aula virtual o a través de las siguientes direcciones web:
http://www.happyminds.es/eliminar-datos-en-mongodb/#sthash.7HkSLRtu.dpbs
http://www.genbetadev.com/bases-de-datos/mongodb-la-vida-cambia-tus-datos-
tambien-operaciones-de-actualizacion-simples
MapReduce
Webgrafía
Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido
relevante para este tema es la sección MongoDB CRUD Operations.
Accede a los documentos desde el aula virtual o a través de la siguiente dirección web:
http://docs.mongodb.org/
Este sitio web contiene una serie de recetas de soluciones a escenarios comunes en el
desarrollo de aplicaciones. Por ejemplo, una de las recetas indica cómo contar los tags
asociados a posts en un sitio web, utilizando el método Map-Reduce.
Accede a los documentos desde el aula virtual o a través de la siguiente dirección web:
http://cookbook.mongodb.org/
MongoBooster
Accede a los documentos desde el aula virtual o a través de la siguiente dirección web:
https://mongobooster.com/
MongoDB Compass
Dentro del sitio oficial se puede acceder a la solución Compass y descargar la aplicación
gratuitamente.
Accede a los documentos desde el aula virtual o a través de la siguiente dirección web:
https://www.mongodb.com/products/compass
Bibliografía
Banker, K. (2012). MongoDB in action, p. 23-28, 76-126. Nueva York: Manning Publications.
Chodorow, K. & Dirolf, M. (2010). MongoDB: The Definitive Guide, p. 23-64, 83-92.
California: O’Reilly.
Copeland, R. (2013). MongoDB Applied Design Patterns, p. 37-73. California: O’Reilly Media.
Tiwari, S. (2011). Professional NoSQL, p. 97-135, 217-232. Indianapolis: John Wiley &
Sons, Inc.
Actividades
Se deberá entregar:
Los desarrolladores de una aplicación web han contratado nuestros servicios para la
captura y almacenamiento de las trazas dejadas por los usuarios de su aplicación. La
información que obtenemos del usuario es: un identificador de usuario, la URL que ha
accedido el usuario, la aplicación a la que pertenece dicha URL (por ejemplo, cliente o
gestor) y la fecha y hora en la que se ha producido la acción. Además de almacenar estos
datos, se nos solicita una serie de informes respecto a ellos:
Listado de URLs accedidas por un usuario en concreto, ordenado por fecha y hora de
acceso.
Listado de todos los usuarios que han accedido a una URL del gestor.
Listado de todos los usuarios que han accedido a la aplicación en un rango de tiempo
específico.
Identificador del último usuario que ha utilizado la aplicación cliente.
Listado de todas las URLs almacenadas y el número de accesos que ha tenido cada
una.
Test
1. ¿Qué comando de la consola de MongoDB se utiliza para indicar la base de datos con
la que se trabajará?
A. select.
B. find.
C. use.
D. Las respuestas A y C son correctas.
3. ¿Cuál será el resultado al insertar un documento que posee un atributo más al resto
de atributos de la colección?
A. Dará un fallo a la hora de insertar los datos porque el modelo de datos es
diferente.
B. Insertará los datos a la colección.
C. Insertará los datos a la colección y creará el nuevo atributo vacío en resto de
documentos.
D. Insertará los datos a la colección, pero sin el nuevo atributo para cumplir con el
modelo.
5. ¿Cuál es el nombre del atributo especial en las collections de MongoDB que ayuda a
identificar de manera única a cada documento?
A. _id.
B. ID.
C. Primary key.
D. Identifier.
6. ¿Qué operador permite modificar los datos de un documento sin tener que incluir el
documento completo como argumento?
A. save.
B. store.
C. update.
D. set.
8 ¿Qué situación tiene que darse para que el comando save actualice un documento en
MongoDB?
A. Que el argumento contenga un identificador existente en la collection.
B. Que el segundo argumento en el comando sea el valor true.
C. Que el argumento se parezca en más de un 50% con un documento en la
collection.
D. save no puede utilizarse para actualizar documentos.
10. ¿Qué comando puede aplicarse sobre el resultado de una consulta en MongoDB para
restringir el número de documentos retornados?
A. limit.
B. restrict.
C. skip.
D. sort.