Está en la página 1de 23

Diseño de Software e

Integración de Sistemas

BASES DE DATOS AVANZADAS

LABORATORIO N° 02

Operaciones con Shell en MongoDB

Alumno(s): Esleyter Eduardo Benque Arela Nota

Grupo: Ciclo: III

Requiere No
Excelente Bueno Puntaje
Criterio de Evaluación mejora acept.
(4pts) (3pts) Logrado
(2pts) (0pts)
Identifica los comandos básicos para manipular
documentos en MongoDB
Adiciona documentos a una base de datos
MongoDB
Modifica documentos en una base de datos
MongoDB
Elimina documentos en una base de datos
MongoDB
Es puntual y redacta el informe
adecuadamente

Laboratorio 2: Operaciones con Shell en MongoDB


Objetivos:
Al finalizar el laboratorio el estudiante será capaz de:
 Identificar las principales características de la base de datos MongoDB
 Instalar la base de datos MongoDB
 Identificar los principales programas que conforman la base de datos MongoDB
 Acceder a una base de datos MongoDB
Bases de Datos Avanzadas

Seguridad:

 Ubicar maletines y/o mochilas en el gabinete del aula de Laboratorio.


 No ingresar con líquidos, ni comida al aula de Laboratorio.
 Al culminar la sesión de laboratorio apagar correctamente la computadora y la pantalla, y ordenar
las sillas utilizadas.

Equipos y Materiales:

 Una computadora con:


 Windows 7 o superior
 VMware Workstation 10+ o VMware Player 7+
 Conexión a la red del laboratorio

 Máquinas virtuales:
 Clon de Windows 7 Pro 64bits Español – Plantilla con el software MongoDB Instalado

Procedimiento:
Lab Setup

1. Inicio del equipo


1.1. Inicie el servidor de la base de datos MongoDB
1.2. Inicie el Shell de MongoDB y crear una base de datos de nombre usando el primer nombre
y apellido, seguido de la palabra Lab02, Ejemplo: JuanPerezLab02

Adición de documentos

2. Creación de la colección Áreas


2.1. A continuación se muestra la información a almacenar en la colección Áreas
c
Nombre Abreviatura Estado
Docencia Doc. A
Informática Inf. A
Electrotecnia Elect. A
Mecánica Mec. A
Estudios Generales EEGG A
Administración Adm. A
Tecnologías de Información TI A
Seguridad Seg. A
2.2. Crear la colección Áreas:
> db.createCollection(“Areas”);

2.3. Verificar la existencia de la colección Áreas:


> show collections;

3. Adición de documentos a la colección Áreas


3.1. Adicionar el documento “Docencia” a la colección Áreas

Guía de Laboratorio No 2 Pág. 2


Bases de Datos Avanzadas
> db.Areas.insert( {Nombre: 'Docencia', Abreviatura: 'Doc.', Estado: 'A'} );

3.2. Verificar que se haya adicionado el nuevo documento:


> db.Areas.find( {} );

3.3. Adicionar el documento “Informática” a la colección Áreas (Anote el comando utilizado):


> db.Areas.insertMany([
... { Nombre: "Docencia", Abreviatura: "Doc.", Estado: "A" },
... { Nombre: "Informática", Abreviatura: "Inf.", Estado: "A" },
... { Nombre: "Electrotecnia", Abreviatura: "Elect.", Estado: "A" },
... { Nombre: "Mecánica", Abreviatura: "Mec.", Estado: "A" },
... { Nombre: "Estudios Generales", Abreviatura: "EEGG", Estado: "A" },
... { Nombre: "Administración", Abreviatura: "Adm.", Estado: "A" },
... { Nombre: "Tecnologías de Información", Abreviatura: "TI", Estado: "A" },
... { Nombre: "Seguridad", Abreviatura: "Seg.", Estado: "A" }
... ])
{

3.4. Verificar que se haya adicionado el nuevo documento (Anote el comando utilizado):

Guía de Laboratorio No 2 Pág. 3


Bases de Datos Avanzadas

3.5. Adicionar, con una sola instrucción, los documentos “Electrotecnia, Mecánica y Estudios
Generales” a la colección Áreas
> db.Areas.insert( [
{Nombre: 'Electrotecnia', Abreviatura: 'Elect.', Estado:'A'},
{Nombre: 'Mecanica', Abreviatura: 'Mec.', Estado:'A'},
{Nombre: 'Estudios Generales',Abreviatura: 'EEGG', Estado:'A'}
] );

3.6. Verificar que se hayan adicionado los tres nuevos documentos (Anote el comando utilizado):

3.7. Adicionar, con una sola instrucción, los documentos “Administración, Tecnologías de
Información y Seguridad” a la colección Áreas (Anote el comando utilizado):
... { Nombre: "Administración", Abreviatura: "Adm.", Estado: "A" },
... { Nombre: "Tecnologías de Información", Abreviatura: "TI", Estado: "A" },

Guía de Laboratorio No 2 Pág. 4


Bases de Datos Avanzadas
... { Nombre: "Seguridad", Abreviatura: "Seg.", Estado: "A" }

3.8. Verificar que se hayan adicionado los tres nuevos documentos (Anote el comando utilizado):

4. Modificación de documentos de la colección Áreas


4.1. Adicionar los siguientes documentos a la colección Áreas
Colección: Areas
Nombre Abreviatura Estado
Area1 A1 X
Area2 A2 X
Area3 A3 X

4.2. Modifique el documento “Area1” con los siguientes datos:


Nombre Abreviatura Estado
Area No 1 Ar1 N
> db.Areas.update(
{Nombre: 'Area1'}, {$set: {Nombre:'Area No 1', Abreviatura:'Ar1', Estado:'N'} }
);
4.3. Verificar que se haya modificado el documento “Area1” (Anote el comando utilizado):

4.4. Modifique el documento Area2 con los siguientes datos: (Anote el comando utilizado):
Nombre Abreviatura Estado
Area No 2 Ar2 P

Guía de Laboratorio No 2 Pág. 5


Bases de Datos Avanzadas

4.5. Verificar que se haya modificado el documento “Area2” (Anote el comando utilizado):

4.6. Modifique el documento Area3 con los siguientes datos: (Anote el comando utilizado):
Nombre Abreviatura Estado
Area No 3 Ar3 N

4.7. Verificar que se haya modificado el documento “Area3” (Anote el comando utilizado):

4.8. Modifique el documento “Area No 1”, cambie el estado con el valor “A”:
> db.Areas.update( {Nombre: 'Area No 1'}, {$set: { Estado:'A'} } );

4.9. Verificar que se haya modificado el estado del documento “Area No 1” (Anote el comando
utilizado):

4.10. Modifique el documento “Area No 2”, cambie la Abreviatura y el Estado con los valores
“ARE2” y “A” respectivamente. (Anote el comando utilizado):

Guía de Laboratorio No 2 Pág. 6


Bases de Datos Avanzadas

4.11. Verificar que se haya modificado el documento “Area No 2” (Anote el comando utilizado):

4.12. Modifique el documento “Area No 3”, cambie su abreviatura con el valor “AN3”: (Anote el
comando utilizado):

4.13. Verificar que se haya modificado el documento “Area No 3” (Anote el comando utilizado):

5. Eliminación de documentos
5.1. Eliminar el documento “Area No 1” de la colección Áreas
> db.Areas.remove( {Nombre: 'Area No 1'} );

5.2. Verificar que se haya eliminado el documento “Area No 1” (Anote el comando utilizado):

5.3. Eliminar el documento “Area No 2” de la colección Áreas (Anote el comando utilizado):

Guía de Laboratorio No 2 Pág. 7


Bases de Datos Avanzadas

5.4. Verificar que se haya eliminado el documento “Area No 2” (Anote el comando utilizado):

5.5. Eliminar el documento con abreviatura “AN3” de la colección Áreas (Anote el comando
utilizado):

5.6. Verificar que se haya eliminado el documento “AN3” (Anote el comando utilizado):

6. Consulta de documentos
6.1. Visualizar todos los documentos de la colección Áreas
> db.Areas.find();
o
> db.Areas.find( {} );

6.2. Visualizar todos los documentos de la colección Áreas mostrando únicamente los campos
Nombre y Estado
> db.Areas.find( {} , { _id:0, Abreviatura:0 } );
o
> db.Areas.find({},{_id:0, Nombre:1, Estado:1});

Guía de Laboratorio No 2 Pág. 8


Bases de Datos Avanzadas

6.3. Visualizar todos los documentos de la colección Áreas mostrando únicamente los campos
Abreviatura y Estado (Anote el comando utilizado):

6.4. Visualizar únicamente el documento de “Electrotecnia” de la colección Áreas:


> db.Areas.find( { Nombre: 'Electrotecnia' } );

Guía de Laboratorio No 2 Pág. 9


Bases de Datos Avanzadas

6.5. Visualizar únicamente el documento de “Informática” de la colección Áreas mostrando


únicamente los campos Nombre y Estado:
> db.Areas.find( { Nombre: 'Informatica' }, { _id:0, Abreviatura:0 } );

6.6. Visualizar los documentos de “Electrotecnia” e “Informática” de la colección Áreas


mostrando únicamente los campos Nombre y Estado:
 Empleando el operador $or
> db.Areas.find( { $or: [ { Nombre: 'Electrotecnia' }, { Nombre: 'Informatica' } ] },
{_id:0, Abreviatura:0} );

 Empleando el operador $in


> db.Areas.find( { Nombre: { $in: [ 'Electrotecnia', 'Informatica' ] } },
{ _id:0, Abreviatura:0} );

6.7. Visualizar únicamente el primer documento de la colección Áreas que tenga el campo
Estado con el valor ‘A’ mostrando únicamente los campos Nombre y Estado:
> db.Areas.findOne( { Estado: 'A' }, { _id:0, Abreviatura:0 } );

6.8. Visualizar todos los documentos de la colección Áreas en orden ascendente según el
campo Nombre, mostrando únicamente los campos Nombre y Estado:
> db.Areas.find( { }, { _id:0, Abreviatura:0 } ).sort( { Nombre: 1} );

Guía de Laboratorio No 2 Pág. 10


Bases de Datos Avanzadas
6.9. Visualizar todos los documentos de la colección Áreas en orden descendente según el
campo Nombre, mostrando únicamente los campos Nombre y Estado:
> db.Areas.find( { }, { _id:0, Abreviatura:0 } ).sort( { Nombre: -1} );

6.10. Visualizar los 3 primeros documentos de la colección Áreas, mostrando únicamente los
campos Nombre y Estado:
> db.Areas.find( {}, { _id:0, Abreviatura:0} ).limit(3);

7. Otras tareas de base de datos


7.1. Crear una copia completa de la colección “Áreas” con el nombre “copiaAreas”
> db.Areas.copyTo( 'copiaAreas' );

7.2. Verifique que exista la nueva colección “copiaAreas” y que su contenido sea idéntico a la
colección “Areas” (Anote los comandos utilizados):

Nota: El comando copyTo() está descontinuado. Luego de ejecutarlo habrá recibido algún
mensaje de advertencia que aconseja no utilizarlo en las versiones actuales porque
para su funcionamiento realiza el bloqueo completo de la colección a ser copiada.

7.3. Crear una segunda copia completa de la colección “Áreas” con el nombre “copia2Areas”
> db.Areas.find().forEach( function( param ) { db.copia2Areas.insert( param ) } );

7.4. Verifique que exista la nueva colección “copia2Areas” y que su contenido sea idéntico a la
colección “Areas” (Anote los comandos utilizados):

7.5. Eliminar la colección “copiaAreas” de la base de datos


> db.copiaAreas.drop()

Guía de Laboratorio No 2 Pág. 11


Bases de Datos Avanzadas
7.6. Verifique que ya no exista la colección “copiaAreas” (Anote el comando utilizado):

7.7. Creación de dos colecciones “Mascotas” y “Cargos”


> db.Mascotas.insert(
[
{_id: 1,nombre: 'Boby', tipo: 'Perro', genero: 'M', fecha_nacimiento: new
Date('01/23/2013')},
{_id: 2,nombre: 'Keyla', tipo: 'Gato', genero: 'H', fecha_nacimiento: new
Date('09/12/2015')},
{_id: 3,nombre: 'Lasie', tipo: 'Perro', genero: 'H', fecha_nacimiento: new
Date('08/31/2012')},
{_id: 4,nombre: 'Feli', tipo: 'Gato', genero: 'M', fecha_nacimiento: new Date('10/15/2011')},
{_id: 5,nombre: 'Lucas', tipo: 'Perro', genero: 'M', fecha_nacimiento: new
Date('04/13/2014')},
{_id: 6,nombre: 'Messi', tipo: 'Gato', genero: 'M', fecha_nacimiento: new
Date('09/12/2015')},
{_id: 7,nombre: 'Nana', tipo: 'Perro', genero: 'H', fecha_nacimiento: new
Date('02/18/2015')},
{_id: 8,nombre: 'Pepa', tipo: 'Loro', genero: 'H', fecha_nacimiento: new Date('11/27/2015')}
]);

> db.Cargos.insert(
[
{_id: 1,nombre: 'Administrador', sueldo: 9000},
{_id: 2,nombre: 'Contador', sueldo: 8500},
{_id: 3,nombre: 'Gerente', sueldo: 13000},
{_id: 4,nombre: 'Supervisor', sueldo: 11000},
{_id: 5,nombre: 'Ingeniero', sueldo: 10500},
{_id: 6,nombre: 'Tecnico', sueldo: 5000},
{_id: 7,nombre: 'Secretaria', sueldo: 4000},
{_id: 8,nombre: 'Practicante', sueldo: 1200},
{_id: 9,nombre: 'Capataz', sueldo: 3500}
]);

Guía de Laboratorio No 2 Pág. 12


Bases de Datos Avanzadas

7.8. Visualizar todos los documentos de la colección Mascotas mostrando únicamente los
campos nombre, tipo y género (Anote el comando utilizado):

7.9. Visualizar únicamente los documentos de mascotas de tipo “Perro” de la colección


Mascotas y mostrando únicamente los campos nombre, tipo y género (Anote el comando
utilizado):

7.10. Visualizar únicamente los documentos de mascotas de tipo “Perro” de género “M” de la
colección Mascotas y mostrando únicamente los campos nombre, tipo y género (Anote el
comando utilizado):

7.11. Adicionar un documento a la colección Mascotas con menor número de campos (No se
incluye el campo “fecha_nacimiento” ):
Guía de Laboratorio No 2 Pág. 13
Bases de Datos Avanzadas
> db.Mascotas.insert( { _id: 9, nombre:'Mirna', tipo:'Gato', genero:'H' } );

7.12. Adicionar un documento a la colección Cargos que incluya únicamente los campos: “_id” y
“nombre” (Anote el comando utilizado):

7.13. Adicionar un documento a la colección Mascotas incluyendo nuevos campos:


> db.Mascotas.insert( { _id:10, nombre:'Kaco', tipo:'Perro', genero:'M',
fecha_nacimiento: "09/23/2015", origen: "Selva peruana" } );

7.14. Adicionar un documento a la colección Cargos que incluya además de todos los campos
actuales, los campos nuevos: “comision” y “estado” (Anote el comando utilizado):

7.15. Visualizar los documentos de mascotas que no sean de tipo “Gato” de la colección
Mascotas y mostrando únicamente los campos nombre, tipo y género:
> db.Mascotas.find( { tipo: {$ne: "Gato"} }, { _id:0, nombre: 1, tipo:1, genero:1 } );
o
> db.Mascotas.find( { tipo: { $not: { $eq: "Gato"} } }, {_id:0, fecha_nacimiento:0 } );

7.16. Visualizar los documentos de cargos cuyo sueldo sea mayor a “6500” soles de la colección
Cargos y mostrando únicamente los campos nombre, y sueldo:
> db.Cargos.find( { sueldo: { $gt: 6500 } }, { _id:0, nombre:1, sueldo:1 } );

7.17. Visualizar los documentos de Mascotas que no sean de tipo Gato y cuyo género no sea
“M” , mostrando únicamente los campos nombre, tipo y género:
> db.Mascotas.find( { $nor: [ { tipo: "Gato" }, { genero: 'M' } ] },
{ _id:0, nombre:1, tipo:1, genero:1 } );

Guía de Laboratorio No 2 Pág. 14


Bases de Datos Avanzadas

7.18. Visualizar los documentos de Mascotas en los que exista el campo “origen”, mostrando
todos los campos:
> db.Mascotas.find( { origen: { $exists: true } } );

7.19. Visualizar los documentos de Mascotas en los que NO exista el campo “origen”, mostrando
todos los campos:
> db.Mascotas.find( { origen: { $not: { $exists: true } } } );

Guía de Laboratorio No 2 Pág. 15


Bases de Datos Avanzadas

7.20. Visualizar los documentos de Cargos en los que exista el campo “sueldo” y cuyo monto
sea mayor a “5000” soles, mostrando todos los campos:
> db.Cargos.find( { sueldo: { $exists: true, $gt: 5000 } } );

Guía de Laboratorio No 2 Pág. 16


Bases de Datos Avanzadas
7.21. Visualizar los documentos de Cargos en los que exista el campo “sueldo” y cuyo monto
sea menor a “5000” soles, mostrando todos los campos:

7.22. Visualizar los documentos de Cargos en los que exista el campo “sueldo” y cuyo monto se
encuentre entre el rango de “5000” y “10000” soles, mostrando todos los campos

Guía de Laboratorio No 2 Pág. 17


Bases de Datos Avanzadas
8. Expresiones regulares “$regex”
8.1. Visualizar los documentos de Mascotas cuyos nombres inicien con la letra “L”, mostrando
todos los campos:
> db.Mascotas.find( { nombre: { $regex: /^L/ } } );

8.2. Visualizar los documentos de Mascotas cuyos nombres contengan la letra “L” en cualquier
posición sin diferenciar mayúsculas de minúsculas, mostrando todos los campos:
> db.Mascotas.find( { nombre: { $regex: /L/i } } );

8.3. Visualizar los documentos de Mascotas cuyos nombres inicien con la letra “L” y además
que contengan la letra “a” en cualquier posición, mostrando todos los campos:
> db.Mascotas.find( { $and: [ {nombre: { $regex: /^L/ } }, { nombre: {$regex: /a/} }
] } );

Guía de Laboratorio No 2 Pág. 18


Bases de Datos Avanzadas

8.4. Visualizar los documentos de Mascotas cuyos nombres no inicien con la letra “L”,
mostrando únicamente el campo “nombre”:
> db.Mascotas.find( { nombre: { $not: /L/ } }, {_id:0, nombre:1 } );

8.5. Visualizar los documentos de Mascotas cuyos nombres terminen en la letra “a”, mostrando
únicamente el campo “nombre”:
> > db.Mascotas.find( { nombre: { $regex: 'a$' } }, {_id:0, nombre:1} );

8.6. Visualizar los documentos de Mascotas cuyos nombres no terminen en la letra “a”,
mostrando únicamente el campo “nombre”:
> > db.Mascotas.find( { nombre: { $not: /a$/ } }, {_id:0, nombre:1} );

8.7. Visualizar los documentos de Mascotas cuyos nombres inicien con alguna de las letras “L”
o “B” o “M”, mostrando únicamente el campo “nombre”:
> db.Mascotas.find( { nombre: { $regex: '[LBM]' } }, { _id:0, nombre:1 } );

8.8. Visualizar los documentos de Mascotas cuyos nombres NO inicien con alguna de las letras
“L” o “B” o “M”, mostrando únicamente el campo “nombre”:
> db.Mascotas.find( { nombre: { $not: /[LBM]/ } }, { _id:0, nombre:1 } );
Guía de Laboratorio No 2 Pág. 19
Bases de Datos Avanzadas

Comparison Query Operators

For comparison of different BSON type values, see the specified BSON comparison order.

Name Description
$eq Matches values that are equal to a specified value.
$gt Matches values that are greater than a specified value.
$gte Matches values that are greater than or equal to a specified value.
$lt Matches values that are less than a specified value.
$lte Matches values that are less than or equal to a specified value.
$ne Matches all values that are not equal to a specified value.
$in Matches any of the values specified in an array.
$nin Matches none of the values specified in an array.

Logical Query Operators

Name Description
$or Joins query clauses with a logical OR returns all documents that match the conditions of
either clause.
$and Joins query clauses with a logical AND returns all documents that match the conditions
of both clauses.
$not Inverts the effect of a query expression and returns documents that do not match the
query expression.
$nor Joins query clauses with a logical NOR returns all documents that fail to match both
clauses.

Regular Expressions
$regex, provides regular expression capabilities for pattern matching strings in queries. MongoDB
uses Perl compatible regular expressions.
To use $regex, use one of the following syntax:

{ <field>: { $regex: /pattern/, $options: '<options>' } }


{ <field>: { $regex: 'pattern', $options: '<options>' } }
{ <field>: { $regex: /pattern/<options> } }

In MongoDB, you can also use regular expression objects (i.e. /pattern/) to specify regular
expressions:

{ <field>: /pattern/<options> }

$options
The following <options> are available for use with regular expression.

Option Description
i Case insensitivity to match upper and lower cases. For an example, see Perform Case-
Insensitive Regular Expression Match.
m For patterns that include anchors (i.e. ^ for the start, $ for the end), match at the
beginning or end of each line for strings with multiline values. Without this option, these
anchors match at beginning or end of the string.

If the pattern contains no anchors or if the string value has no newline characters (e.g. \
n), the m option has no effect.

Guía de Laboratorio No 2 Pág. 20


Bases de Datos Avanzadas
x “Extended” capability to ignore all white space characters in the $regex pattern unless
escaped or included in a character class.

Additionally, it ignores characters in-between and including an un-escaped hash/pound


(#) character and the next new line, so that you may include comments in complicated
patterns. This only applies to data characters; white space characters may never
appear within special character sequences in a pattern.

The x option does not affect the handling of the VT character (i.e. code 11).

Requires $regex with $options syntax


s Allows the dot character (i.e. .) to match all characters including newline characters. For
an example, see Use the . Dot Character to Match New Line.
Requires $regex with $options syntax

Guía de Laboratorio No 2 Pág. 21


Bases de Datos Avanzadas

Tarea:
1. Implemente un archivo se script el cual permita crear una base de datos de nombre “TareaLab02”
además debe contener sentencias para crear dos colecciones y adicionar documentos a dichas
colecciones (mínimo 10 documentos por cada colección). Cada estudiante propondrá los
nombres de cada colección. (Incluya el contenido del archivo resultante en esta sección de la
guía de laboratorio)

2. Elaborar una serie de comandos que permitan consultar documentos de las tablas creadas en la
base de datos anterior y adjuntarlos como parte de la presente guía de laboratorio. Deberá incluir
“El requerimiento textual de la información a obtener” y luego el “comando implementado para
obtener la información requerida” (En forma similar como se han presentado los ejercicios en la
guía de laboratorio).

Conclusiones:
Indicar las conclusiones que llegó después de los temas tratados de manera práctica en este
laboratorio.
1. Flexibilidad en consultas: El shell de MongoDB ofrece una amplia gama de operadores
y expresiones para realizar consultas flexibles y poderosas en las colecciones de la base
de datos. Estos incluyen operadores de comparación, expresiones regulares y lógica
booleana, que permiten realizar consultas precisas y complejas según las necesidades
del usuario.
2. Facilidad de uso: El shell de MongoDB está diseñado para ser intuitivo y fácil de usar.
Las operaciones son similares a la sintaxis de JavaScript, lo que facilita a los
Guía de Laboratorio No 2 Pág. 22
Bases de Datos Avanzadas
desarrolladores familiarizarse con el entorno y realizar consultas de manera eficiente.
3. Interactividad: El shell proporciona un entorno interactivo que permite a los usuarios
realizar consultas, insertar y modificar datos en tiempo real. Esto es especialmente útil
durante el desarrollo y la depuración, ya que los usuarios pueden experimentar con
diferentes consultas y comandos para comprender mejor el comportamiento de la base de
datos.
4. Potencia y rendimiento: El shell de MongoDB es una herramienta poderosa que permite
a los usuarios realizar operaciones avanzadas, como agregaciones, indexación y
administración de bases de datos. Además, MongoDB está diseñado para ofrecer un
rendimiento óptimo incluso con grandes volúmenes de datos, lo que garantiza tiempos de
respuesta rápidos para consultas y operaciones.
5. Acceso a la funcionalidad completa de MongoDB: A través del shell, los usuarios
tienen acceso a la funcionalidad completa de MongoDB, lo que les permite administrar
bases de datos, colecciones, usuarios y roles, así como realizar operaciones CRUD
(Crear, Leer, Actualizar, Eliminar) en los datos almacenados. Esto proporciona un control
total sobre la base de datos y facilita la realización de tareas administrativas y de
desarrollo.

Guía de Laboratorio No 2 Pág. 23

También podría gustarte