En este proyecto se crearán y definirán consultas en MOngoDb a una hipotética base de datos para una app de mensajería instantánea. Se proporcionarán las sentencias para el shell de MongoDB y los resultados que se obtienen en cada uno de los apartados.
db.getCollection('Usuarios_Individuales').find({'Ciudad':'Madrid','Edad':{ $gt: 20, $lt:40}},
{ 'Email':1,'Edad':1,'_id': 0}).sort({'Edad':-1}
Con el siguiente resultado { 'Email' : 'plopezternasco@hotmail.es', 'Edad' : 38 }
{ 'Email' : 'ilopezmena@gmail.es', 'Edad' : 35 }
{ 'Email' : 'afraguasazul@gmail.es', 'Edad' : 35 }
Lo más interesante de esta consulta, es la utilización de $gt: 20 y $lt:40. Estas dos etiquetas nos permiten encontrar aquellos usuarios que tengan una edad entre 20 y 40 años sin incluir aquellos que tengan 20 o 40. db.Usuarios_bloqueadores.find (
{
$or: [
{
'Bloqueos':{$elemMatch: { 'Hora_bloqueo.Hora': 10, 'Hora_bloqueo.Minutos': 0 }}}
,
{
'Bloqueos':{$elemMatch: { 'Hora_bloqueo.Hora': 9, 'Hora_bloqueo.Minutos': {$gte: 25 }}}
}
]
}
, {Nombre:1, Apellidos:1,_id:0, 'Bloqueos.Hora_bloqueo':1 } ).pretty()
db.Usuarios_bloqueadores.find (
{
$or: [
{
'Bloqueos':{$elemMatch: { 'Hora_bloqueo.Hora': 10, 'Hora_bloqueo.Minutos': 0 }}}
,
{
'Bloqueos':{$elemMatch: { 'Hora_bloqueo.Hora': 9, 'Hora_bloqueo.Minutos': {$gte: 25 }}}
}
]
}
, {Nombre:1, Apellidos:1,_id:0 } ).pretty()
Los resultados con la comprobación de la hora. {
"Nombre" : "Cristina",
"Apellidos" : "Garcia Abril",
"Bloqueos" : [
{
"Hora_bloqueo" : {
"Hora" : 4,
"Minutos" : 44,
"Segundos" : 6
}
},
{
"Hora_bloqueo" : {
"Hora" : 9,
"Minutos" : 28,
"Segundos" : 33
}
}
]
}
{
"Nombre" : "Gabriel",
"Apellidos" : "Regalado Martin",
"Bloqueos" : [
{
"Hora_bloqueo" : {
"Hora" : 9,
"Minutos" : 52,
"Segundos" : 43
}
},
{
"Hora_bloqueo" : {
"Hora" : 15,
"Minutos" : 12,
"Segundos" : 47
}
}
]
}
Sin la comprobación: { "Nombre" : "Cristina", "Apellidos" : "Garcia Abril" }
{ "Nombre" : "Gabriel", "Apellidos":"Regalado Martin"}
db.Grupos_usuarios.find( {
'Identificador' : {$regex: "G-.*\.[02468]$" }, 'Id_propietario' : {$regex: "U-.*\.[02468]$" } },{'Identificador':1, 'Id_propietario':1,_id:0 }).pretty()
db.Grupos_usuarios.find( {
'Identificador' : {$regex: "G-.*\.[02468]$" }, 'Id_propietario' : {$regex: "U-.*\.[02468]$" } },{'Identificador':1, 'Id_propietario':1,_id:0 }).count()
Los resultados han sido: { "Identificador" : "G-3456", "Id_propietario" : "U-3490" }
{ "Identificador" : "G-3458", "Id_propietario" : "U-3484" }
{ "Identificador" : "G-3460", "Id_propietario" : "U-3462" }
{ "Identificador" : "G-3466", "Id_propietario" : "U-3480" }
{ "Identificador" : "G-3468", "Id_propietario" : "U-3456" }
{ "Identificador" : "G-3470", "Id_propietario" : "U-3464" }
{ "Identificador" : "G-3482", "Id_propietario" : "U-3484" }
{ "Identificador" : "G-3484", "Id_propietario" : "U-3480" }
{ "Identificador" : "G-3486", "Id_propietario" : "U-3490" }
{ "Identificador" : "G-3488", "Id_propietario" : "U-3480" }
{ "Identificador" : "G-3494", "Id_propietario" : "U-3480" }
El resultado del segundo comando es: 11 db.Usuarios_desbloqueadores.find (
{
'Desbloqueos':
{$elemMatch:
{'Fecha_desbloqueo.Mes': 10 , 'Hora_desbloqueo.Hora': {$gt:10 , $lte:15} }
}
}, {Nombre:1, Email:1, 'Desbloqueos.Hora_desbloqueo.Hora':1 , 'Desbloqueos.Fecha_desbloqueo.Mes':1 ,_id:0 } ).pretty()
db.Usuarios_desbloqueadores.find (
{
'Desbloqueos':
{$elemMatch:
{'Fecha_desbloqueo.Mes': 10 , 'Hora_desbloqueo.Hora': {$gt:10 , $lte:15} }
}
}, {Nombre:1, Apellidos:1 ,_id:0 } ).pretty()
Los resultados han sido: {
"Nombre" : "Juan",
"Email" : "jsanzrobles@hotmail.es",
"Desbloqueos" : [
{
"Fecha_desbloqueo" : {
"Mes" : 10
},
"Hora_desbloqueo" : {
"Hora" : 13
}
},
{
"Fecha_desbloqueo" : {
"Mes" : 11
},
"Hora_desbloqueo" : {
"Hora" : 19
}
}
]
}
{
"Nombre" : "Barbara",
"Email" : "bbellovalero@gmail.es",
"Desbloqueos" : [
{
"Fecha_desbloqueo" : {
"Mes" : 5
},
"Hora_desbloqueo" : {
"Hora" : 14
}
},
{
"Fecha_desbloqueo" : {
"Mes" : 10
},
"Hora_desbloqueo" : {
"Hora" : 14
}
}
]
}
Siguiendo las peticiones del enunciado, obtengo: { "Nombre" : "Juan", "Apellidos" : "Sanz Robles" }
{ "Nombre" : "Barbara", "Apellidos" : "Bello Valero" }
db.Grupos_usuarios.aggregate([
{ "$unwind": "$Miembros" },
{$match: {'Miembros.Edad': {$gt: 35}}},
{ "$group": {
"_id": "$Miembros.Ciudad",
"count": { "$sum": 1 }
}},
{ $match: { count: { $gt: 15} } },
{ $sort : { count : -1 } }
])
{ "_id" : "Valencia", "count" : 21 }
{ "_id" : "Zaragoza", "count" : 17 }