MongoDB $ Rank

MongoDB $ Rank
Cada documento en una colección recibe un rango distintivo por el operador de $ rango en MongoDB después de un conjunto de reglas de clasificación. El rango está determinado por la secuencia de los registros en el conjunto de resultados. Se utiliza junto con la operación $ setwindowfields para agregar un nuevo campo con el rango proporcionado a cada registro. Esto hace que sea sencillo clasificar documentos de acuerdo con estándares particulares, como puntajes y es útil para actividades como hacer tablas de clasificación o producir informes de rendimiento.

Utilizando una colección de resultados de prueba como ejemplo, puede emplear al operador de rango $ para clasificar a los participantes de acuerdo con los resultados de sus pruebas. Luego puede emplear este rango en cálculos o consultas posteriores. Encontrar los mejores y más bajos artistas en un conjunto de datos, así como comparar el rendimiento relativo de varias personas o grupos, es significativo. Esta guía le está ayudando a tener una idea sobre el uso del operador de rango en MongoDB.

Crear colección MongoDB

Antes de saltar al tema, deberíamos crear un entorno para trabajar. Por lo tanto, ya hemos instalado y configurado la base de datos MongoDB en nuestra máquina. El comando a continuación se ejecuta en la interfaz de línea de comandos MongoDB. La "prueba" antes del símbolo ">" indica que la instrucción se está ejecutando en la base de datos "Prueba". El comando que se está ejecutando es "DB.createCollection ("resultado") ". Este comando crea una nueva colección dentro de la base de datos "Test" llamada "Resultado". La respuesta dada es "Ok: 1". Esto indica que el comando fue exitoso y el "resultado" de la colección se creó con éxito. "Test" es el nombre de la base de datos que se utiliza.

Prueba> DB.createCollection ("resultado")
OK: 1

Insertar registro a la colección

Aunque hemos creado una nueva colección, todavía está vacía. Necesitamos tener al menos 2 registros en una colección "resultado" para aplicar el operador de rango en él. El siguiente código está insertando múltiples documentos en una colección llamada "resultado" en una base de datos MongoDB. Cada récord cubre dos campos, "STD" y "Score". El campo "STD" representa el nombre de un estudiante, y el campo "Puntuación" representa su puntaje en una prueba. El código está insertando 15 documentos en total, con cada documento que representa un estudiante diferente y su puntaje respectivo.

Cada documento está separado por una coma y encerrado en tirantes rizados . Los puntajes varían de -2 a 99 y los nombres de los estudiantes son Nina, Johny, Eden, Robert y Lia. Cada estudiante tiene al menos 2 puntajes que se usan para 2 materias diferentes. La base de datos reconoce la inserción de estos documentos y el código devuelve una lista de identificadores únicos (ObjectID) para cada documento.

Prueba> DB.Resultado.insertMany ([std: "nina", stork: 56, std: "Johny", Score: 77, std: "eden", stork: 32, std: "Robert", Score: 96 , std: "lia", stork: 12, std: "nina", stork: 76, std: "Johny", stork: 87, std: "eden", puntaje: 52, std: "Robert", Score: 99, std: "lia", stork: 42, std: "nina", stork: 32, std: "Johny", Score: 67, std: "Eden", Score: 42, std: "Robert", Score: 89, std: "lia", stork: -2])
Reconocido: Verdadero,
insertedids:
'0': ObjectId ("63CD0BB2F114CB71B42E38E5"),
'1': ObjectId ("63CD0BB2F114CB71B42E38E6"),
'2': ObjectId ("63CD0BB2F114CB71B42E38E7"),
'3': ObjectId ("63CD0BB2F114CB71B42E38E8"),
'4': ObjectId ("63CD0BB2F114CB71B42E38E9"),
'5': ObjectId ("63CD0C1BF114CB71B42E38EA"),
'6': ObjectId ("63CD0C1BF114CB71B42E38EB"),
'7': ObjectId ("63CD0C1BF114CB71B42E38EC"),
'8': ObjectId ("63CD0C1BF114CB71B42E38ED"),
'9': ObjectId ("63CD0C1BF114CB71B42E38EE"),
'10': ObjectId ("63CD0CD6F114CB71B42E38EF"),
'11': ObjectId ("63CD0CD6F114CB71B42E38F0"),
'12': ObjectId ("63CD0CD6F114CB71B42E38F1"),
'13': ObjectId ("63CD0CD6F114CB71B42E38F2"),
'14': ObjectId ("63CD0CD6F114CB71B42E38F3")

Mostrar registros de MongoDB

Después de insertar los 15 registros con éxito en la colección "resultado", veremos todos los registros una vez más. Para esto, el comando que hemos estado utilizando se ha adjunto a continuación. Esta consulta está utilizando el método find () para recuperar todos los documentos en una colección llamada "resultado". El método find () se utiliza para devolver una matriz de documentos en la colección "resultado" que coincida con la consulta especificada. En este caso, no se especifica ninguna consulta. Entonces, los 15 documentos en la colección "Resultado" se devuelven. Los documentos de salida contienen tres campos: _id, std y puntaje. El campo _id es un identificador único asignado a cada documento por MongoDB, el campo STD contiene el nombre del estudiante y el campo de puntaje contiene la puntuación de prueba para cada estudiante.

Prueba> DB.Resultado.encontrar()
[
_id: ObjectId ("63CD0BB2F114CB71B42E38E5"), STD: 'Nina', Score: 56,
_id: ObjectId ("63CD0BB2F114CB71B42E38E6"), STD: 'JoHny', Score: 77,
_id: ObjectId ("63CD0BB2F114CB71B42E38E7"), STD: 'Eden', Score: 32,
_id: ObjectId ("63CD0BB2F114CB71B42E38E8"), STD: 'Robert', Score: 96,
_id: ObjectId ("63CD0BB2F114CB71B42E38E9"), STD: 'LIA', SCORE: 12
_id: ObjectId ("63CD0C1BF114CB71B42E38EA"), STD: 'Nina', Score: 76,
_id: ObjectId ("63CD0C1BF114CB71B42E38EB"), STD: 'JoHny', Score: 87,
_id: ObjectId ("63CD0C1BF114CB71B42E38EC"), STD: 'EDEN', SCUENTA: 52,
_id: ObjectId ("63CD0C1BF114CB71B42E38ED"), STD: 'Robert', Score: 99,
_id: ObjectId ("63CD0C1BF114CB71B42E38EE"), STD: 'LIA', SCUENTA: 42
_id: ObjectId ("63CD0CD6F114CB71B42E38EF"), STD: 'Nina', Score: 32,
_id: ObjectId ("63CD0CD6F114CB71B42E38F0"), STD: 'JoHny', Score: 67,
_id: ObjectId ("63CD0CD6F114CB71B42E38F1"), STD: 'Eden', Score: 42,
_id: ObjectId ("63CD0CD6F114CB71B42E38F2"), STD: 'Robert', Score: 89,
_id: ObjectId ("63CD0CD6F114CB71B42E38F3"), STD: 'LIA', SCORE: -2
]

Ejemplo # 01: rango en orden descendente

Este comando está utilizando el método agregado () para realizar una operación de agregación en una colección llamada "resultado" en una base de datos MongoDB. El método agregado () toma una matriz como argumento, donde cada etapa transforma los datos. En este caso, la primera etapa de la tubería es usar el operador $ setWindowfields que está configurando los campos de la ventana al dividir los documentos por el campo "STD", clasificando los documentos por el campo "Puntuación" en orden descendente (-1). Luego se especifica el campo de salida, que crea un nuevo campo llamado "RankScoreForStd" y asigna un rango a cada documento dentro de su ventana utilizando el operador $ Rank.

La salida final muestra los documentos en la colección "Resultado" con el campo adicional "RankScoreForStd" agregado a cada documento, lo que indica el rango del estudiante en función de su puntaje. Los registros se clasifican en orden de puntaje descendente y se agrupan por el nombre del estudiante. En este caso, el guión está clasificando a los estudiantes en función de sus puntajes. El estudiante con el puntaje más alto obtiene un rango de 1, el estudiante con el segundo puntaje más alto obtiene un rango de 2, y así sucesivamente.

Prueba> DB.Resultado.Aggregate ([$ setWindowFields: partitionBy: "$ std", sortBy: score: -1, output: rankScoreforStd: $ rank: ]))
[
_id: ObjectId ("63CD0C1BF114CB71B42E38EC"), STD: 'EDEN', SCORE: 52, RankScoreForStd: 1,
_id: ObjectId ("63CD0CD6F114CB71B42E38F1"), STD: 'Eden', Score: 42, RankScoreForStd: 2,
_id: ObjectId ("63CD0BB2F114CB71B42E38E7"), STD: 'Eden', Score: 32, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EB"), STD: 'JoHny', Score: 87, RankScoreForStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E6"), STD: 'JoHny', Score: 77, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F0"), STD: 'JoHny', Score: 67, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EE"), STD: 'LIA', SCORE: 42, RankScoreForStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E9"), STD: 'LIA', SCORE: 12, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F3"), STD: 'LIA', SCORE: -2, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EA"), STD: 'Nina', Score: 76, RankScoreForStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E5"), STD: 'Nina', Score: 56, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38EF"), STD: 'Nina', Score: 32, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38ED"), STD: 'Robert', Score: 99, RankScoreforStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E8"), STD: 'Robert', Score: 96, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F2"), STD: 'Robert', Score: 89, RankScoreForStd: 3
]

Ejemplo # 02: Rango en orden ascendente

En la ilustración anterior, hemos clasificado los documentos en orden descendente del campo de puntuación utilizando el valor de puntaje "-1". Esta vez, realizaremos una operación de rango en todos los documentos en orden ascendente del campo de puntuación. Para esto, hay una pequeña modificación en el mismo comando agregado, comenzando desde el método agregado () que se utiliza para procesar datos y devolver el resultado en la forma de uno o más documentos.

El operador $ setwindowfields se utiliza para agregar un nuevo campo a cada documento basado en la función de ventana especificada. El comando está configurando los campos de la ventana dividiendo los documentos por el campo "STD", clasificando los documentos por el campo "Puntuación" en orden ascendente (1) usando el valor "1" y luego agregando un nuevo campo llamado "RankScoreForStd" que Asigna un rango a cada documento basado en el puntaje. La salida muestra una matriz de todos los documentos en la colección "Resultado", con un campo adicional "RankScoreForStd" para cada documento. En este caso, a cada estudiante se le asigna un rango único y los documentos se clasifican en orden ascendente del puntaje.

Prueba> DB.Resultado.Aggregate ([$ setWindowFields: partitionBy: "$ std", sortBy: score: 1, output: rankScoreforStd: $ rank: ]))
[
_id: ObjectId ("63CD0C1BF114CB71B42E38EC"), STD: 'EDEN', SCUENTO: 32, RANCESCOREFORSTD: 1,
_id: ObjectId ("63CD0CD6F114CB71B42E38F1"), STD: 'Eden', Score: 42, RankScoreForStd: 2,
_id: ObjectId ("63CD0BB2F114CB71B42E38E7"), STD: 'Eden', Score: 52, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EB"), STD: 'JoHny', Score: 67, RankScoreForStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E6"), STD: 'JoHny', Score: 77, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F0"), STD: 'JoHny', Score: 87, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EE"), STD: 'LIA', SCORE: -2, RankScoreForStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E9"), STD: 'LIA', SCORE: 12, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F3"), STD: 'LIA', SCORE: 42, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38EA"), STD: 'Nina', Score: 26, RankScoreforStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E5"), STD: 'Nina', Score: 56, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38EF"), STD: 'Nina', Score: 76, RankScoreForStd: 3,
_id: ObjectId ("63CD0C1BF114CB71B42E38ED"), STD: 'Robert', Score: 89, RankScoreforStd: 1,
_id: ObjectId ("63CD0BB2F114CB71B42E38E8"), STD: 'Robert', Score: 96, RankScoreForStd: 2,
_id: ObjectId ("63CD0CD6F114CB71B42E38F2"), STD: 'Robert', Score: 99, RankScoreForStd: 3
]

Conclusión

Después de presentar el operador de rango de MongoDB, discutimos su uso en MongoDB. Después de eso, creamos un entorno para trabajar y agregamos ejemplos de MongoDB para ilustrar el uso del operador de rango con mayor precisión. El primer ejemplo muestra el uso del operador de rango con el valor "-1" para mostrar los documentos en orden descendente. Mientras que el segundo ejemplo cubre su uso con el valor "1" para mostrar y clasificar los documentos en orden ascendente de la colección.