Hoy me he visto con la necesidad de realizar una consulta en MongoDB, la cual necesitaba ordenar por la suma de una serie de campos de un documento y os voy a explicar como la he realizado usando Aggregation.
 
El ejemplo consiste en una colección de documentos de cursos en el cual se recogen las calificaciones de asignaturas y debemos mostrar los documentos ordenados por la suma de todas las calificaciones por documento.
 
La estructura del documento es la siguiente:
{
    nombre    : "Daniel Romero",
    Curso : "Probando MongoDB por HispaBigdata",
    NotaAsignatura1  : 5.5,
    NotaAsignatura2  : 6.4,
    NotaAsignatura3  : 7.8
}
Aquí tenéis una serie de documentos con los que podéis hacer pruebas.
db.perfiles.insert({
    nombre    : "Daniel Romero",
    Curso : "Probando MongoDB por HispaBigdata",
    NotaAsignatura1  : 5.5,
    NotaAsignatura2  : 6.4,
    NotaAsignatura3  : 7.8
});
db.perfiles.insert({
    nombre    : "Alberto Hernandez",
    Curso : "Probando CouchDB por HispaBigdata",
    NotaAsignatura1  : 8.5,
    NotaAsignatura2  : 5.3,
    NotaAsignatura3  : 6.7
});
db.perfiles.insert({
    nombre    : "Natalia Miro",
    Curso : "Probando MongoDB por HispaBigdata",
    NotaAsignatura1  : 8.4,
    NotaAsignatura2  : 3.5,
    NotaAsignatura3  : 6.25
});
db.perfiles.insert({
    nombre    : "Manuel Rodriguez",
    Curso : "Probando CouchDB por HispaBigdata",
    NotaAsignatura1  : 5.4,
    NotaAsignatura2  : 6.4,
    NotaAsignatura3  : 8.2
});
Y ahora realizamos el aggregatión:
db.perfiles.aggregate(
{$project: {nombre : "$nombre", 
            curso : "$curso", 
            NotaAsignatura1 : "$NotaAsignatura1", 
            NotaAsignatura2 : "$NotaAsignatura2", 
            NotaAsignatura3 : "$NotaAsignatura3",
            sum : {$add : ["$NotaAsignatura1", "$NotaAsignatura2", "$NotaAsignatura1"]}}},
{$sort: {sum: -1}}
)
Como podeis observar vamos a proyectar todos los campos del documento y vamos a crear una variable llamadasum que contendrá la suma de todas las calificaciones, posteriormente vamos a ordenador de forma descendente por el valor de dicha variable. Es un ejemplo sencillo el cual nos puede ser útil a la hora de trabajar con calificaciones.

Compártelo:

FacebookTwitterDiggGoogle BookmarksLinkedIn

Daniel Romero Sanchez
Author: Daniel Romero Sanchez
Responsable de sistemas y Arquitecto Cloud - vExpert 2015/16 - VCP550-DCV - LPIC-1


Escribir un comentario

Código de seguridad
Refescar

DBigCloud en tu idioma

esenfrdeitptru

Gold Sponsor

 

vExpert 2017

DbigCloud newsletter

Suscribete a nuestra newsletter y recibe cada semana los mejores artículos seleccionados por DBigCLoud.
Email type
Please wait