Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Presentado por:
Laydi Viviana Bautista Rengifo
Presentado a:
Marlon Cardenas
Mayo, 2023
UNIR - Universidad Internacional de la Rioja
Tabla de Contenidos
mongosh
use miscelanea
db.createCollection("books")
db.createCollection("companies")
{
_id: 3,
title: 'Specification by Example',
isbn: '1617290084',
pageCount: 0,
publishedDate: ISODate("2011-06-03T07:00:00.000Z"),
thumbnailUrl:
'https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-images/adzic.jpg',
status: 'PUBLISH',
authors: [ 'Gojko Adzic' ],
categories: [ 'Software Engineering' ]
}
Ejemplo de documento de la colección Companies:
{
_id: ObjectId("52cdef7c4bab8bd675297d8b"),
name: 'AdventNet',
permalink: 'abc3',
crunchbase_url: 'http://www.crunchbase.com/company/adventnet',
homepage_url: 'http://adventnet.com',
blog_url: '',
blog_feed_url: '',
twitter_username: 'manageengine',
category_code: 'enterprise',
number_of_employees: 600,
founded_year: 1996,
deadpooled_year: 2,
tag_list: '',
alias_list: 'Zoho ManageEngine ',
email_address: 'pr@adventnet.com',
phone_number: '925-924-9500',
description: 'Server Management Software',
created_at: ISODate("2007-05-25T19:24:22.000Z"),
updated_at: 'Wed Oct 31 18:26:09 UTC 2012',
overview: '<p>AdventNet is now <a href="/company/zoho-manageengine" title="Zoho
ManageEngine" rel="nofollow">Zoho ManageEngine</a>.</p>\n' +
'\n' +
'<p>Founded in 1996, AdventNet has served a diverse range of enterprise IT,
networking and telecom customers.</p>\n' +
'\n' +
'<p>AdventNet supplies server and network management software.</p>',
image: {
available_sizes: [
[
[ 150, 55 ],
'assets/images/resized/0001/9732/19732v1-max-150x150.png'
],
[
[ 150, 55 ],
'assets/images/resized/0001/9732/19732v1-max-250x250.png'
],
[
[ 150, 55 ],
'assets/images/resized/0001/9732/19732v1-max-450x450.png'
]
]
},
products: [],
relationships: [
{
is_past: true,
title: 'CEO and Co-Founder',
person: {
first_name: 'Sridhar',
last_name: 'Vembu',
permalink: 'sridhar-vembu'
}
},
{
is_past: true,
title: 'VP of Business Dev',
person: {
first_name: 'Neil',
last_name: 'Butani',
permalink: 'neil-butani'
}
},
{
is_past: true,
title: 'Usabiliy Engineer',
person: {
first_name: 'Bharath',
last_name: 'Balasubramanian',
permalink: 'bharath-balasibramanian'
}
},
{
is_past: true,
title: 'Director of Engineering',
person: {
first_name: 'Rajendran',
last_name: 'Dandapani',
permalink: 'rajendran-dandapani'
}
},
{
is_past: true,
title: 'Market Analyst',
person: {
first_name: 'Aravind',
last_name: 'Natarajan',
permalink: 'aravind-natarajan'
}
},
{
is_past: true,
title: 'Director of Product Management',
person: {
first_name: 'Hyther',
last_name: 'Nizam',
permalink: 'hyther-nizam'
}
},
{
is_past: true,
title: 'Western Regional OEM Sales Manager',
person: { first_name: 'Ian', last_name: 'Wenig', permalink: 'ian-wenig' }
}
],
competitions: [],
providerships: [
{
title: 'DHFH',
is_past: true,
provider: { name: 'A Small Orange', permalink: 'a-small-orange' }
}
],
total_money_raised: '$0',
funding_rounds: [],
investments: [],
acquisition: null,
acquisitions: [],
offices: [
{
description: 'Headquarters',
address1: '4900 Hopyard Rd.',
address2: 'Suite 310',
zip_code: '94588',
city: 'Pleasanton',
state_code: 'CA',
country_code: 'USA',
latitude: 37.692934,
longitude: -121.904945
}
],
milestones: [],
video_embeds: [],
screenshots: [
{
available_sizes: [
[
[ 150, 94 ],
'assets/images/resized/0004/3400/43400v1-max-150x150.png'
],
[
[ 250, 156 ],
'assets/images/resized/0004/3400/43400v1-max-250x250.png'
],
[
[ 450, 282 ],
'assets/images/resized/0004/3400/43400v1-max-450x450.png'
]
],
attribution: null
}
],
external_links: [],
partners: []
}
a. Identifica todas las distintas categorías (categories) de la colección books.
db.books.aggregate([
{ $unwind: "$categories" },
{ $group: { _id: "$categories" } }
])
b. Identifica los distintos estados (status) de la colección books.
- Publish
- Meap
db.books.aggregate([
{ $group: { _id: "$status" } }
])
db.getCollection('books').find(
{longDescription: {$gte: "A", $lt: "B"}},
{title: 1, longDescription: 1}
)
db.getCollection('books').find( {
status: "PUBLISH",
authors: { $size: 2 }
},
{ title: 1, longDescription: 1, status: 1, authors: 1 }
)
e. Describe brevemente qué ocurre si a la consulta del punto anterior le añades al final la
siguiente instrucción: .toArray()
db.getCollection('books').find( {
status: "publicado",
authors: { $size: 2 }
},
{ title: 1, longDescription: 1, status: 1, authors: 1 }
).toArray()
f. ¿Qué ocurre si ahora también le añades lo siguiente?: .forEach(function(valor,
indice, array){print("Titulo: " + valor.title + "Author 1: " + valor.authors[0] + "
Author 2: " + valor.authors[1] + " Registro No. " + indice);})
¿Para qué crees que sería útil esto último?
En este caso, por cada documento que cumpla la condición se va a ejecutar una función que va a
imprimir en pantalla un mensaje obteniendo título, el nombre de los autores y el índice, este
último atributo, el índice es un valor que indica la posición del documento en el array y se crear
al momento de utilizar la función .toArray().
Esto puede ser útil para mejorar la presentación de la información hacia el usuario.
db.getCollection('books').find(
{status: "PUBLISH",authors: { $size: 2 }},
{ title: 1, longDescription: 1, status: 1, authors: 1 }
).toArray().forEach(function(valor, indice, array){
print("Titulo: " + valor.title + "Author 1: " + valor.authors[0] + "
Author 2: " + valor.authors[1] + " Registro No. " + indice);
})
3. Consulta: Colección 1. Books
db.books.dataSize()
db.books.countDocuments()
La cantidad de libros que tiene 0 páginas son 166 y los que no son 265.
db.companies.dataSize()
db.companies.countDocuments()
c. ¿Cuántas compañías se fundaron en los años 1996, 1997, 2001 y 2005 respectivamente?
La cantidad de compañías creadas fueron 216, 200, 464, 961 en los años 1996, 1997, 2001 y
2005 respectivamente.
db.companies.aggregate([
{ $group: { _id: "$founded_year", companies_created: { $sum: 1 }}},
{ $match: { _id: { $in: [1996, 1997, 2001, 2005] }}},
{ $sort: { _id: 1 } }
])
d. Lista las compañías que se dedican a «web» o «mobile» y recupera: el nombre,
descripción, número de empleados, email, año, mes y día de su fundación.
db.companies.find(
{ $or: [ { category_code: "web" }, { category_code: "mobile" } ] },
{
name: 1,
description: 1,
number_of_employees: 1,
email_address: 1,
founded_year: { $year: "$founded_at" },
founded_month: { $month: "$founded_at" },
founded_day: { $dayOfMonth: "$founded_at" }
}
).toArray()
e. Lista las compañías que se dedican a videojuegos y muéstrales en orden descendente
según el año en que fueron fundadas.
db.companies.find(
{ category_code: "games_video" }
).sort( { founded_year: -1 } )
La cantidad de compañías que tienen 600 o más empleados son 303 compañías.
db.companies.find(
{
founded_year: { $gte: 2001, $lte: 2005 },
number_of_employees: { $gte: 500 },
$or: [
{ category_code: "games_video" },
{ category_code: "music" }
]
},
{
name: 1,
homepage_url: 1,
twitter_username: 1,
number_of_employees: 1
})
Para resolver esta pregunta, se plantearon dos formas de verificar si el campo category_code
podría tener games_video y music al mismo tiempo, primero podemos ver que para todos los
documentos, el atributo category_type es de tipo string o nulo.
Realizando la siguiente consulta:
db.getCollection('companies').aggregate([
{ $addFields: { category_type: { $type: "$category_code" } } },
{ $group: { _id: "$category_type", count: { $sum: 1 }}}
])
Hay 16050 documentos con el campo category_type en String y 2751 con el campo en nulo.
Y por último se aplicó una búsqueda, de tipo regex para encontrar algún documento que en el
campo category_type tuviera la palabra games_video y music al mismo tiempo, y el resultado
fue cero.
db.companies.find(
{ $and: [ { category_code: { $regex: "games" } },
{ category_code: { $regex: "music" } }] }
).count()
h. Lista las empresas que cuentan con única y exclusivamente 2 oficinas en la ciudad de San
Francisco.
Las empresas que cuentan con única y exclusivamente 2 oficinas en la ciudad de San Francisco
son 2 empresas: Notifixious y GoGrid.
db.getCollection('companies').aggregate([
{ $match: { "offices": { $size: 2 } } },
{ $unwind: "$offices" },
{ $match: { "offices.city": 'San Francisco' } },
{ $group: { _id: { _id: "$_id", name: "$name"}, count: { $sum: 1 } } },
{ $match: { count: 2 } },
{ $project: { _id: "$_id._id", name: "$_id.name" } }
]).toArray().forEach(function(valor, indice, array){
print(indice + "." + valor.name);
})
i. Lista el nombre, el mes y día de adquisición de las empresas de videojuegos que hayan
sido adquiridas en el año 2007 por un precio igual o superior a los 10 millones de dólares
y que tengan oficinas en la ciudad de Culver City.
db.companies.aggregate([
{ $match: {
category_code: "games_video",
"acquisition.acquired_year": 2007,
"acquisition.price_amount": { $gte: 10000000} }
},
{ $unwind: "$offices" },
{ $match: { "offices.city": 'Culver City' } },
{ $group: { _id: {
_id: "$_id",
name: "$name",
year: "$acquisition.acquired_year",
month: "$acquisition.acquired_month"}}
},
{ $project: {
_id: "$_id._id",
name: "$_id.name",
year_acquisition: "$_id.year",
month_acquisition: "$_id.month"}
}
])