MongoDB 3 Past Paper PDF
Document Details
Uploaded by Itan
Universidad Internacional de La Rioja
Tags
Summary
This document is an overview of MongoDB, including its methods of data capture and storage. It provides an introduction, software support information, and discusses data models and manipulation. The document also contains information on data insertion, retrieval, and updating, and includes a case study example.
Full Transcript
Tema 3 Métodos de Captura y Almacenamiento de los Datos MongoDB © Universidad Internacional de La Rioja (UNIR) Índice Esquema 3 Ideas clave 4 3.1. Introducción y objetivos 4 3.2. Descarga e instalación 7 3.3. Software de apoyo 10 3.4. Flexibilidad del modelo de datos 12 3.5. Inserción de datos 14 3....
Tema 3 Métodos de Captura y Almacenamiento de los Datos MongoDB © Universidad Internacional de La Rioja (UNIR) Índice Esquema 3 Ideas clave 4 3.1. Introducción y objetivos 4 3.2. Descarga e instalación 7 3.3. Software de apoyo 10 3.4. Flexibilidad del modelo de datos 12 3.5. Inserción de datos 14 3.6. Lectura de datos 19 3.7. Actualización de datos 22 3.8. Caso práctico 27 A fondo 34 Test 38 MongoDB Compass es la solución propietaria de este tipo de herramienta. MongoBooster es una herramienta GUI multiplataformas que permite la construcción de consultas fluidas y que posee un gran numero de herramientas muy útiles. Existen muchas aplicaciones, tanto internas como externas, que facilitan el uso del MongoDB. Software de apoyo © Universidad Internacional de La Rioja (UNIR) El comando db..save crea un documento en la collection si este no existía previamente. El comando db.< collection>.insert recibe el objeto a añadir en formato JSON. Inserción de datos En la practica, la mayoría de documentos de una colección comparten una estructura similar, aunque esto no es una regla fija. Dos documentos de una colección pueden tener atributos totalmente diferentes. El esquema de MongoDB es flexible permitiendo modelos de datos totalmente diferentes. Flexibilidad del modelo El comando db..findOne permite obtener un solo documento. Los resultados de una consulta pueden modificarse para ser ordenados, truncados u omitidos. El criterio de búsqueda puede incluir operaciones como menor que ($lt) y mayor que ($gt), y en ($in). Find recibe dos parámetros: el criterio de búsqueda y la proyección de atributos a mostrar. El comando principal para la consulta de documentos es db..find. L e c tura s y co nsultas TRATAMIENTO DE DATOS EN MONGODB El comando para eliminar documento es db..remove. Recibe un parámetro con el criterio de búsqueda. El comando update recibe tres parámetros: criterio, acción y opciones. El comando db..update permite cambiar atributos específicos de un conjunto de documentos. El comando db..save actualiza un documento si ya existe en la colección. Actualización de datos Esquema Métodos de Captura y Almacenamiento de los Datos Tema 3. Esquema 3 Ideas clave 3.1. Introducción y objetivos 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. Al tratarse de un tema muy práctico, la mejor forma de estudiarlo es a través de la realización de los trabajos asignados. Además de los trabajos, es recomendable que trabajes de forma proactiva con MongoDB, lo cual ayudará a familiarizarse con el funcionamiento del sistema, los comandos más relevantes y, especialmente, con los aspectos relacionados con su instalación. Los objetivos que cubrirás con este tema son los siguientes: Conocer cómo funciona MongoDB dentro del ámbito de las bases de datos NoSQL. Entender la forma en que MongoDB almacena los datos. Aprender las funciones necesarias para la manipulación de los datos. Hacer uso de MongoDB dentro de soluciones de persistencia, aplicando conceptos generales en el modelado de los datos. © Universidad Internacional de La Rioja (UNIR) Primeros pasos con MongoDB Para interactuar con el sistema de base de datos MongoDB se utiliza la consola o terminal, la cual se inicia ejecutando el programa Mongo. Es necesario que antes de iniciar la consola se inicie el demonio o servicio mongod. El demonio es el encargado de escuchar y servir las peticiones. El lenguaje de programación utilizado en la consola es JavaScript. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 4 Al arrancar la consola, se podrá ver información similar a la siguiente: Figura 1. Consola de MongoDB. El mensaje de bienvenida de la consola muestra la versión de la aplicación (en el ejemplo es 4.4.2), seguida de la base de datos a la que se ha conectado. La versión de Mongo que se recomienda para este curso es la 3.6.21. No hay ningún inconveniente en que instales la versión actual en tu propio ordenador, de esta forma podrás trabajar o bien con la versión Community (más ligera) o bien con la Enterprise (más robusta e ideal para las empresas). En las versiones recientes de MongoDB, además de tener la clásica consola para manipular las bases de datos, estas incorporan una interfaz gráfica que permite © Universidad Internacional de La Rioja (UNIR) manipular las bases de datos de forma más intuitiva llamada Compass. Figura 2. Interfaz MongoDB Compass. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 5 Como se mencionó anteriormente, es muy intuitiva y de forma rápida te podrás hacer al uso de dicha herramienta. Recuerda que Compass necesita conectarse a tu server local (o remoto) de MongoDB. El server se instalará e iniciará cuando ejecutes el instalador correspondiente. Por defecto, la consola se conecta a la base de datos llamada test. Para cambiar la base de datos sobre la que trabajamos, utilizaremos el comando use. Así, en el siguiente ejemplo indicamos a la consola que deseamos utilizar la base de datos tienda. > use tienda Figura 3. Uso de base de datos desde MongoDB. 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 siguiente desde la línea de comandos del sistema operativo. > mongo tienda Es conveniente aclarar que no es necesario que la base de datos tienda exista para © Universidad Internacional de La Rioja (UNIR) 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. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 6 3.2. Descarga e instalación MongoDB ofrece una versión Enterprise y Community de su base de datos de documentos distribuidos. La versión comunitaria ofrece el modelo de documento flexible junto con consultas ad hoc, indexación y agregación en tiempo real. Como sistema distribuido, ofrece una alta disponibilidad a través de la replicación integrada y la conmutación por error junto con la escalabilidad horizontal con fragmentación nativa. MongoDB Enterprise Server, además de ofrecer todo lo anterior, incluye más funcionalidades relacionadas con la seguridad y distribución de los datos, ideal para entornos profesionales. La instalación de MongoDB puede realizarse en el sistema operativo Windows mediante los siguientes pasos: Paso 1: descarga el fichero de instalación, en formato zip o msi, desde la siguiente dirección web: http://www.mongodb.org/downloads Paso 2: en la pestaña Community Server habrá que descargar el archivo msi de instalación. Si el sistema operativo que va a soportar la instalación es de 64 bits, se recomienda elegir la versión de Windows. Esta versión funciona en casi todas las versiones de Windows de 64 bits. Paso 3: en el caso de no tener un sistema operativo de 64 bits o querer una versión anterior, en el enlace All Version Binaries se pueden encontrar todas las versiones © Universidad Internacional de La Rioja (UNIR) de la base de datos. Paso 4: instalar la aplicación siguiendo los pasos. Paso 5: una vez instalada una de las versiones, se crea un folder en la ruta C:\data\db (por ejemplo). Paso 6: inicia el servidor de MongoDB ejecutando el programa mongod.exe, ubicado en la subcarpeta bin. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 7 Paso 7: a partir de la versión 3.x.x de MongoDB, el instalador sobre Windows crea el demonio y lo incluye en la lista de procesos o servicios que ejecutará el sistema operativo. Esto quiere decir que Mongo ya estará funcionando después de instalarlo, solo tendréis que conectaros con su consola o con Compass, el cual viene disponible también y se inicia una vez acaba la conexión. Figura 4. Listado de servicios de Windows, entre ellos el de MongoDB. Directorios de la instalación Una vez instalado, en el directorio de instalación podréis encontrar los siguientes subdirectorios: bin: todos los programas que necesita Mongo para ejecutarse. data: el directorio donde por defecto se crearán las bases de datos. log: un fichero con todas las trazas de log del motor y de los accesos al servidor mondodb. snmp: ficheros de configuración para una instancia de mongod como un subagente © Universidad Internacional de La Rioja (UNIR) SNMP. Esto es útil en la versión Enterprise. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 8 Figura 5. Directorio de instalación de MongoDB. Algunos programas importantes de la instalación se describen brevemente a © Universidad Internacional de La Rioja (UNIR) continuación. Figura 6. Ejecutables principales de MongoDB. Servidor no como servicio: mongod.exe Servidor como servicio: mongod.exe, lo utiliza Windows para crear el servicio. Router: mongos.exe Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 9 Cliente: mongo.exe Herramientas de monitorización: mongostat.exe, mongotop.exe Herramienta para importar y exportar bases de datos: mongodump.exe, mongorestore.exe, mongoexport.exe, mongoimport.exe Otras herramientas: bsondump.exe, mongofiles.exe Como recomendación general, la instalación de MongoDB es preferible que se haga sobre un directorio conocido destinado para ello. En Windows se instalará por defecto en Archivos de Programa; esto no es un error, pero es recomendable hacerlo sobre otro directorio menos general. 3.3. Software de apoyo Para interactuar con MongoDB, no solo se dispone de la consola clásica (ventana negra) para poder manipular 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 es una herramienta GUI multiplataforma basada en shell para MongoDB a partir de la versión 2.4, que permite la construcción de consultas fluidas, © Universidad Internacional de La Rioja (UNIR) soporte de sintaxis ES6, una experiencia IntelliSense y un gran número de herramientas útiles para el manejo de la base de datos. El servicio de traducción incorporado conoce todas las posibles compleciones, métodos, propiedades, variables, palabras clave, incluso los nombres de la colección MongoDB, nombres de campo y operadores. Las sugerencias de IntelliSense aparecen mientras se escribe. Siempre se puede activar manualmente con Ctrl-Shift-Space. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 10 MongoBooster incluye un lector Shell para hacer 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. Schema Analyzer es una herramienta de compilación muy útil. Debido a la característica sin esquema, las colecciones en MongoDB no tienen un documento de esquema para describir el tipo de datos del campo, la estructura de la colección y las validaciones. Con la herramienta Analizador de Esquemas, se puede obtener un documento para describir el esquema de cierto conjunto de registros probados (al azar, el primero, el último, etc.). MongoBooster tiene varias versiones de pago, pero dispone de una gratuita con ciertas limitaciones: La característica de autocompletar se restringe a la base de datos de «test» o «demo» después de expirar la prueba de 60 días. Schema Analyzer está restringido a la base de datos de test. Deshabilitada la importación de tablas de bases de datos externas. Desactivada la exportación de colecciones a un archivo SQL. Enterprise Auth (X.509, Kerberos, LDAP) se desactiva después de los 60 días de prueba. MongoDB Compass MongoDB también posee un software propio para la manipulación externa de su base © Universidad Internacional de La Rioja (UNIR) de datos a través de una GUI. Esta aplicación permite ejecutar consultas ad hoc en segundos, interactuar con sus datos con funcionalidad CRUD completa y ver y optimizar el rendimiento de la consulta. Está disponible para la mayoría de los sistemas operativos. Compass permite tomar decisiones más inteligentes sobre la indexación, la validación de documentos y mucho más. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 11 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 el 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 construir fácilmente consultas complejas solo pulsando un botón y mostrando los resultados, tanto gráficamente como en documentos JSON. También permite modificar, insertar y borrar documentos a través de un editor visual intuitivo. Se pueden ejecutar las consultas a través de una interfaz gráfica, fácil de entender que ayuda a identificar y resolver problemas de rendimiento. Ayuda a comprender el tipo y el tamaño de los índices, su utilización y propiedades especiales. 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. 3.4. Flexibilidad del modelo de datos 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 © Universidad Internacional de La Rioja (UNIR) 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. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 12 En el siguiente ejemplo se pueden ver los datos de 2 pilotos de Fórmula 1. El primero de ellos tiene 2 campeonatos mundiales en esta competición mientras que el segundo ninguno, de ahí que se haya omitido este campo. { "_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" ] © Universidad Internacional de La Rioja (UNIR) } En la práctica, la mayoría de los documentos de una colección comparte una estructura similar, pero la flexibilidad del esquema aporta una capacidad de modelado de los documentos independientes. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 13 3.5. Inserción de datos La creación de documentos en una collection se realiza con el comando insert. La sintaxis del comando es la siguiente: db..insert() 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. La siguiente captura muestra la creación de cinco documentos más dentro de la collection productos. db.productos.insert({nombre: "Barra de Pan", precio: 0.75}) db.productos.insert({nombre: "Zumo de naranja", precio: 1.00}) db.productos.insert({nombre: "Leche", precio: 1.20}) db.productos.insert({nombre: "Queso", precio: 2.00}) © Universidad Internacional de La Rioja (UNIR) db.productos.insert({nombre: "Mantequilla", precio: 1.50}) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 14 Figura 7. Ejecución de instrucciones de Insert. Otra alternativa es la inserción múltiple de documentos. Para ello, utilice la instrucción inserMany([…]) con un array de documentos a insertar como argumento. db.productos.insertMany([{nombre: "Barra de Pan", precio: 0.75}, {nombre: "Zumo de naranja", precio: 1.00}, {nombre: "Leche", precio: 1.20}, {nombre: "Queso", precio: 2.00}, {nombre: "Mantequilla", precio: 1.50}]) © Universidad Internacional de La Rioja (UNIR) Figura 8. Ejecución de instrucción en MongoDB. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 15 Recuerda que MongoDB utiliza de base JavaScript, por lo tanto, lo siguiente es correcto: try { db.productos.insertMany( [ … ] ); } catch (e) { print (e); } Consulta los documentos creados con el siguiente comando: > db.productos.find() Figura 9. Ejecución de instrucción búsqueda en MongoDB. 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. © Universidad Internacional de La Rioja (UNIR) > db.productos.insert({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"), "nombre" : "Barra de Pan", "precio" : 0.75 }) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 16 Figura 10. Ejecución de instrucción en MongoDB. Inserta nuevamente el documento anterior, pero sin incluir el _id. > db.productos.insert({"nombre" : "Barra de Pan", "precio" : 0.75 }) Figura 11. Ejecución de instrucción de insert en MongoDB. ¿Qué ocurre? Figura 12. Ejecución de instrucción de búsqueda en MongoDB. © Universidad Internacional de La Rioja (UNIR) Otro comando para crear documentos es el comando save, con la siguiente sintaxis: db..save() Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 17 El comando save tiene un comportamiento similar al del comando insert. La principal diferencia es que si el documento enviado como argumento contiene un atributo _id y existe un documento con dicho _id, ese documento será reemplazado por el nuevo. En la siguiente captura, el documento previo se reemplaza completamente por el nuevo contenido: > db.productos.save({nombre: "Mantequilla", precio: 3.50}) Figura 13. Ejecución de instrucción save en MongoDB. Realiza nuevamente la prueba de insertar el documento indicando el _id y observa el error, ¿o no hay error? > db.productos.save({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"), "nombre" : "Barra de Pan", "precio" : 0.75 }) © Universidad Internacional de La Rioja (UNIR) Figura 14. Ejecución de instrucción de búsqueda en MongoDB. Usando save, cambia el precio del documento anterior y repite el proceso. > db.productos.save({ "_id" : ObjectId("5fc9a0cc3cb2c79952e59f80"), "nombre" : "Barra de Pan", "precio" : 1.75 }) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 18 Figura 15. Ejecución de instrucción save en MongoDB. ¿Qué ha ocurrido ahora? Sería interesante que lo comentes en el Foro. 3.6. Lectura de datos 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..find(, ) Ambos argumentos son opcionales y, en caso de definirlos, deben seguir el formato JSON. Los criterios de búsqueda son las condiciones que los documentos resultantes deben cumplir. Las condiciones se estructuran en pares clave-valor, donde el valor puede ser de tipo primitivo (número, cadena de texto, etc.) o un objeto para el uso de tres operadores de comparación: © Universidad Internacional de La Rioja (UNIR) $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». $in, $nin: evalúan la pertenencia y ausencia respectivamente de un atributo en un array dado. $exists: evalúa que exista el atributo indicado. $type: evalúa que el campo sea de un tipo específico. $all: evalúa arrays que coincidan completamente con el parámetro dado. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 19 $elemMatch: permite evaluar arrays a nivel de elementos, de forma muy específica. 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. El argumento de proyección indica los atributos. La estructura de este argumento es una lista de pares clave-valor, donde la clave es el atributo y el valor es 1, para mostrarlo, y 0, para ocultarlo. Por defecto, se muestran todos los atributos de los documentos, y el atributo _id se incluye siempre que no es omitido. En ambos argumentos, se pueden incluir atributos de subdocumentos. Esto se realiza utilizando el operador punto (.) para separar el subdocumento del atributo. La siguiente imagen muestra el ejemplo básico del comando find, mostrando todos los atributos de los documentos en la collection productos. > db.productos.find() © Universidad Internacional de La Rioja (UNIR) Figura 16. Ejecución de instrucción de búsqueda en MongoDB. El siguiente ejemplo muestra todos los productos con el atributo precio exactamente igual a 1. > db.productos.find({precio:1}) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 20 Figura 17. Ejecución de instrucción de búsqueda en MongoDB. 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. db.productos.find({precio: {$lte: 1} }) db.productos.find({precio: {$gt: 1, $lt: 2} }) db.productos.find({ $and: [{precio: {$gt: 1}}, {precio: {$lt: 2}} ]}) Figura 18. Ejecución de instrucción de búsqueda en MongoDB. Todos los ejemplos previos han mostrado los documentos completos. El siguiente ejemplo muestra solamente el atributo nombre para la última consulta. © Universidad Internacional de La Rioja (UNIR) > db.productos.find({ $and: [{precio: {$gt: 1}}, {precio: {$lt: 2}} ]}, {_id: 0, nombre: 1}) Figura 19. Ejecución de instrucción de búsqueda con proyección en MongoDB. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 21 Los resultados obtenidos a partir de una consulta pueden transformarse mediante cualquier combinación de tres operaciones: limit: indica la cantidad máxima de documentos a mostrar. skip: indica la cantidad de documentos a omitir al inicio en un inicio. 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. > db.productos.find().sort({precio: -1}).limit(2) Figura 20. Ejecución de instrucción de búsqueda ordenada en MongoDB. Además de find, MongoDB brinda el comando findOne para la búsqueda de un solo documento en una consulta. Los argumentos son los mismos que en el comando find. © Universidad Internacional de La Rioja (UNIR) 3.7. Actualización de datos En el subtema sobre inserción de datos se menciona que el comando save puede utilizarse para reemplazar un documento específico en una collection. Si lo deseado es modificar documentos que coinciden con un criterio de búsqueda, puede utilizarse el comando update. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 22 Antes de la versión 2.2: db..update(, , , ) A partir de la versión 2.2: db..update(, , ) 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: $set: permite crear o cambiar un atributo en específico. $unset: permite eliminar un atributo. $inc: incrementa un número. $rename: cambia el nombre de un atributo. Las opciones de modificación pueden ser dos: multi: por defecto, update solamente modifica un documento. Si el modificador multi tiene el valor true, se modificarán todos los documentos que cumplan con las condiciones de búsqueda. upsert: si ningún documento cumple con las condiciones de búsqueda y upsert se © Universidad Internacional de La Rioja (UNIR) define con el valor true, el comando update creará un documento. En cualquier modificación, el atributo _id se mantiene constante siempre que no se modifique directamente. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 23 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. > db.productos.update({ precio: { $gte: 2}}, {$set: {precio: 3}}, {multi: true}) Figura 21. Ejecución de instrucción de actualización en MongoDB. Realiza ahora la siguiente prueba: > db.productos.updateMany({ precio: { $gte: 2}}, {$set: {precio: 7.5}}) Figura 22. Ejecución de instrucción de actualización masivo en MongoDB. Y ahora esta otra prueba: > db.productos.updateOne({ precio: { $gte: 7}}, {$set: {precio: 8.555}}) © Universidad Internacional de La Rioja (UNIR) Figura 23. Ejecución de instrucción de actualización única en MongoDB. > db.productos.find() Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 24 Figura 24. Ejecución de instrucción de búsqueda en MongoDB. La eliminación de documentos se realiza a través del comando remove, deleteMany y deleteOne. db..remove(, ) El primer argumento se comporta de la misma manera que los criterios de búsqueda en el comando find, mientras que el segundo es un valor booleano para indicar si se desea eliminar solamente un documento de la collection. Inserta los siguientes documentos: db.inventario.insertMany([ {item : "revista" , {item : "libro" , {item : "postal" , cantidad : cantidad : cantidad : 25 , estado : 50 , 45 , estado : estado : "A" "B" "A" }, }, } © Universidad Internacional de La Rioja (UNIR) ]); Figura 25. Ejecución de instrucción de actualización masivo en MongoDB. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 25 Ahora ejecuta la instrucción siguiente y borra todos los documentos cuyo estado sea “B”. db.inventario.deleteMany({ estado : "B" }) Figura 26. Ejecución de instrucción de borrado masivo en MongoDB. Consulta los documentos y comprueba que solo quedan los documentos con estado igual a “A”. Figura 27. Ejecución de instrucción de borrado masivo en MongoDB. Ahora ejecuta el otro comando de borrado y observa cómo se borra solo un único documento. © Universidad Internacional de La Rioja (UNIR) db.inventario.deleteOne({ estado : "A" }) Figura 28. Ejecución de instrucción de borrado masivo en MongoDB. ¿Has podido comprender cuándo conviene usar un comando antes que otro? Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 26 3.8. Caso práctico Para este caso, descarga e importa con MongoDB Compass el fichero JSON con datos de prueba. Si el fichero no está disponible, escribe al profesor para que os lo publique en el aula virtual. Una vez cargado en MongoDB, 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": 3, "title": "Specification by Example", "isbn": "1617290084", "pageCount": 0, "publishedDate": { "$date": "2011-06-03T07:00:00.000Z"}, "thumbnailUrl": "https://...", "shortDescription": "…", "longDescription": "…", "status": "PUBLISH", "authors": ["Gojko Adzic"], "categories": ["Software Engineering"] } Nota: los campos en rojo se irán omitiendo en las consultas debido a su amplio © Universidad Internacional de La Rioja (UNIR) contenido. 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. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 27 > db.books.find({}, {thumbnailUrl: 0, longDescription: 0, shortDescription: 0 }).limit(3) Figura 29. Ejecución de instrucción de búsqueda con proyección en MongoDB. 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. > db.books.distinct("authors") Como se puede ver, no se repite ninguno de ellos: Figura 30. Función distinct en MongoDB. Para realizar búsquedas utilizando el comando distinct, hay que aplicar el filtro en © Universidad Internacional de La Rioja (UNIR) el segundo parámetro de la función como se puede ver a continuación: > db.books.distinct("title", {authors: "Vlad Landres"}) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 28 Figura 31. Función distinct con parámetros en MongoDB. Obtenidos los autores, se va a filtrar por uno de ellos y se van a mostrar los campos «ISBN», «title» y «authors». Nótese que la opción a 0 de ocultado se utiliza solo para el campo _id y la opción a 1 para los campos que se quieren mostrar. > db.books.find({authors:"Vlad Landres"},{_id:0, isbn:1, author:1, title:1}) Figura 32. Función de búsqueda con proyección en MongoDB. Si se quiere realizar un filtro utilizando los operadores de comparación: > db.books.find({pageCount: {$gt:100} }, {_id:0, isbn:1, author:1, title:1, © Universidad Internacional de La Rioja (UNIR) pageCount:1}).limit(3) Figura 33. Función de búsqueda en MongoDB. Se puede ver que es muy sencillo realizar una búsqueda con contenido exacto, pero si se quiere hacer una búsqueda con contenido parcial, es necesario utilizar el operador $regex (regular expression). Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 29 A continuación, se realiza una búsqueda con aquellos títulos que tengan contenida la palabra Internet: > db.books.find({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1, title:1}) Figura 34. Función de búsqueda en MongoDB. También se puede contar el número de elementos encontrados en la búsqueda con la función.count(): > db.books.find({title: {$regex: ".*Internet"}}).count() Figura 35. Función de búsqueda con expresión regular en MongoDB. Si se quiere insertar un nuevo atributo, se utiliza el operador $set como segundo parámetro de un update, y si el campo es un array, se utiliza el $addToSet. A la búsqueda anterior se va a añadir el tag Internet. Es muy importante no olvidarse de añadir en el tercer parámetro la opción multi: true, para que la modificación se haga © Universidad Internacional de La Rioja (UNIR) en más de un documento. > db.books.update({title: {$regex: ".*Internet"}}, {$addToSet: {tags: "Internet"}}, {multi: true}) > db.books.find({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1, title:1, tags:1}) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 30 Figura 36. Función de búsqueda con expresión regular en MongoDB. 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 Internet: Figura 37. Función de búsqueda en MongoDB. 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: > db.books.update({}, {$unset: {tags: ""}}, {multi: true}) © Universidad Internacional de La Rioja (UNIR) Figura 38. Función de búsqueda en MongoDB. Consulta los documentos nuevamente para ver el resultado. > db.books.find({title: {$regex: ".*Internet"} }, {_id:0, isbn:1, author:1, title:1, tags:1}) Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 31 Para terminar, si se quiere realizar una búsqueda en la que se pretende buscar los libros de dos categorías diferentes, es necesario especificarlos dentro de un array inicializado por el operado $or, como se puede ver a continuación: > db.books.find({$or: [ {cetegories: "PowerBuilder"}, {categories: "ClientServer"}]}, {_id:0, title:1, isbn:1, categories:1}) Figura 39. Función de búsqueda en MongoDB. Después de leer todo el tema, el reto siguiente es que hagas un repaso sobre el uso de MongoDB y sus principales comandos. Para ello, accede al vídeo «Uso de MongoDB» que acompaña este tema. Vídeo 1. Uso de MongoDB. © Universidad Internacional de La Rioja (UNIR) Accede al vídeo a través del aula virtual En esta otra lección titulada «Documentos de MongoDB y patrones de diseño», se presenta un screencast de la consola de MongoDB, incluyendo ejemplos de documentos y de patrones de diseño. Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 32 Vídeo 2. Documentos de MongoDB y patrones de diseño. Accede al vídeo a través del aula virtual Finalmente, en «Ejemplos de consultas en MongoDB» se presenta un screencast sobre varios ejemplos de consultas realizadas en la consola de MongoDB. Vídeo 3. Ejemplos de consultas en MongoDB. © Universidad Internacional de La Rioja (UNIR) Accede al vídeo a través del aula virtual Métodos de Captura y Almacenamiento de los Datos Tema 3. Ideas clave 33 A fondo MongoDB: the definitive guide Chodorow, K., y Dirolf, M. (2019). MongoDB: the definitive guide. O’Reilly. https://www.oreilly.com/library/view/mongodb-the-definitive/9781491954454/ Este libro contiene información detallada sobre la creación, eliminación y modificación de documentos en MongoDB. El capítulo 4 se centra en la realización de consultas. Bases de datos en MongoDB Compass Ávila, J. (22 de junio de 2020). Como crear Bases de Datos en MongoDB Compass Creación de Colecciones, Documentos y Vistas [Archivo de vídeo]. © Universidad Internacional de La Rioja (UNIR) https://www.youtube.com/watch?v=8gbDA7kH5zg En este vídeo encontrarás un tutorial muy detallado de operaciones en MongoDB muy usuales, tales como creación de bases de datos utilizando MongoDB Compass, creación de colecciones, documentos, vistas, importar colecciones desde archivos CSV y la forma de establecer agrupación y/o relaciones entre colecciones. Métodos de Captura y Almacenamiento de los Datos Tema 3. A fondo 34 MongoDB: bases de datos, colecciones y documentos Informática DP. (21 de abril de 2020). 2/3 - MongoDB 2020 - Bases de datos, Colecciones y Documentos [Archivo de vídeo]. https://www.youtube.com/watch?v=Fk5Kq-zhcJo En este vídeo encontrarás una guía práctica para aprender a manipular MongoDB desde cero. El IDE utilizado te dará otra visión de herramientas que puedes integrar al uso diario de esta base de datos. Documentación oficial de MongoDB MongoDB. (2021). Documentation [Página web]. http://docs.mongodb.org/ Dentro del sitio oficial con la documentación del sistema MongoDB, el contenido © Universidad Internacional de La Rioja (UNIR) relevante para este tema es la sección MongoDB CRUD Operations. Métodos de Captura y Almacenamiento de los Datos Tema 3. A fondo 35 A cookbook for MongoDB MongoDB. (2021). Página web. http://cookbook.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. MongoBooster MongoDB Admin GUI. (2021). Downloads. NoSQL Booster [Página web]. https://nosqlbooster.com/downloads © Universidad Internacional de La Rioja (UNIR) Enlace de descarga, documentación y características de esta GUI para MongoDB. Métodos de Captura y Almacenamiento de los Datos Tema 3. A fondo 36 MongoDB Compass MongoDB. (2021). MongoDB Compass [Página web]. https://www.mongodb.com/try/download/compass Dentro del sitio oficial se puede acceder a la solución Compass y descargar la aplicación gratuitamente. Bibliografía Banker, K. (2016). MongoDB in action. Manning Publications. Bradshaw, S., Brazil, E., y Chodorow, K. (2019). MongoDB: the definitive guide: powerful and scalable data storage. O'Reilly Media. Copeland, R. (2013). MongoDB applied design patterns (pp. 37-73). O’Reilly Media. Dayley, B., Dayley, B., y Dayley, C. (2017). Node.js, MongoDB and Angular web development: the definitive guide to using the MEAN stack to build web © Universidad Internacional de La Rioja (UNIR) applications. Addison-Wesley. Giamas, A. (2017). Mastering MongoDB 3.x: an expert's guide to building faulttolerant MongoDB applications. Packt Publishing. Tiwari, S. (2011). Professional NoSQL (pp. 97-135, 217-232). John Wiley & Sons. Métodos de Captura y Almacenamiento de los Datos Tema 3. A fondo 37 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. 2. ¿Cuál de las siguientes afirmaciones es correcta? A. MongoBooster es una herramienta GUI multiplataforma que facilita la construcción de consultas. B. MongoDB Compass es una herramienta para la manipulación externa de bases de datos MongoDB. C. MongoBooster y MongoDB Compass proporcionan información estadística y de rendimiento de una base de datos MongoDB. D. Todas las afirmaciones anteriores son correctas. 3. ¿Cuál será el resultado de insertar en una colección, un documento que posee uno o más atributos diferentes a los de otros documentos que existen en dicha colección? A. Dará un fallo al 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 el resto © Universidad Internacional de La Rioja (UNIR) de documentos. D. Insertará los datos a la colección, pero sin el nuevo atributo para cumplir con el modelo. Métodos de Captura y Almacenamiento de los Datos Tema 3. Test 38 4. ¿Qué método utiliza MongoDB para crear un nuevo documento dentro de una colección? A. save. B. insert. C. create. D. Las respuestas A y B son correctas. 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. $concat. B. $concatArrays. C. $add. D. $set. 7. La operación MongoDB equivalente a JOIN en SQL es: A. Se puede conseguir concatenando sentencias find en la misma operación. B. El aggregation framework. C. MongoDB no tiene operación equivalente a JOIN. © Universidad Internacional de La Rioja (UNIR) D. Ninguna de las anteriores es cierta. Métodos de Captura y Almacenamiento de los Datos Tema 3. Test 39 8. ¿Qué situación tiene que darse para que el comando save actualice un documento? 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 % a un documento en la collection. D. save no puede utilizarse para actualizar documentos. 9. ¿Qué método se utiliza en MongoDB para eliminar un conjunto de documentos? A. save. B. delete. C. remove. D. unset. 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. © Universidad Internacional de La Rioja (UNIR) D. sort. Métodos de Captura y Almacenamiento de los Datos Tema 3. Test 40