MongoDB $ Rank

MongoDB $ Rank
Todo documento em uma coleção recebe uma classificação distinta pelo operador $ rank em MongoDB após um conjunto de regras de classificação. A classificação é determinada pela sequência dos registros no conjunto de resultados. É utilizado junto com a operação $ setWindowfields para adicionar um novo campo com a classificação fornecida a cada registro. Isso simplifica a classificação de documentos de acordo com padrões específicos, como pontuações e é útil para atividades como fazer tabelas de classificação ou produzir relatórios de desempenho.

Usando uma coleção de resultados de teste como exemplo, você pode empregar o operador de $ rank para classificar os participantes de acordo com os resultados dos testes. Você pode empregar esta classificação em cálculos ou consultas subsequentes. Encontrar o desempenho superior e mais baixo em um conjunto de dados, além de comparar o desempenho relativo de várias pessoas ou grupos, é significativo. Este guia está ajudando você a ter uma idéia sobre o uso do operador de classificação em MongoDB.

Crie uma coleção MongoDB

Antes de pular para o tópico, devemos criar um ambiente para trabalhar. Portanto, já instalamos e configuramos o banco de dados MongoDB em nossa máquina. O comando abaixo está sendo executado na interface da linha de comando mongodb. O "teste" antes do símbolo ">" indica que a instrução está sendo executada no banco de dados "teste". O comando que está sendo executado é “db.CreateCollection ("resultado") ". Este comando cria uma nova coleção dentro do banco de dados "teste" chamado "resultado". A resposta dada é "ok: 1". Isso indica que o comando foi bem -sucedido e a coleção "resultado" foi criada com sucesso. "Teste" é o nome do banco de dados que está sendo usado.

Teste> dB.CreateCollection ("Resultado")
ok: 1

Insira o registro da coleção

Embora tenhamos criado uma nova coleção, ela ainda está vazia. Precisamos ter pelo menos 2 registros em uma coleção "resultado" para aplicar o operador de classificação nele. O código abaixo está inserindo vários documentos em uma coleção chamada "resultado" em um banco de dados MongoDB. Cada registro cobre dois campos, "std" e "score". O campo "std" representa o nome de um aluno, e o campo "pontuação" representa sua pontuação em um teste. O código está inserindo 15 documentos no total, com cada documento representando um aluno diferente e sua respectiva pontuação.

Cada documento é separado por uma vírgula e fechado em aparelhos encaracolados . As pontuações variam de -2 a 99 e os nomes dos alunos são Nina, Johny, Eden, Robert e Lia. Cada aluno tem pelo menos 2 pontuações que são usadas para 2 disciplinas diferentes. A inserção desses documentos é reconhecida pelo banco de dados e o código retorna uma lista de identificadores exclusivos (ObjectIds) para cada documento.

Teste> dB.Resultado.insertmany ([std: "nina", pontuação: 56, std: "johny", pontuação: 77, std: "eden", pontuação: 32, std: "robert", pontuação: 96 , std: "lia", pontuação: 12, std: "nina", pontuação: 76, std: "johny", pontuação: 87, std: "eden", pontuação: 52, std: "robert", pontuação: 99, std: "lia", pontuação: 42, std: "nina", pontuação: 32, std: "johny", pontuação: 67, std: "Eden", pontuação: 42, std: "Robert", Score: 89, std: "lia", pontuação: -2])
reconhecido: verdadeiro,
inserdids:
'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")

Exibir registros MongoDB

Depois de inserir os 15 registros com sucesso na coleção "resultado", estaremos dando uma olhada em todos os registros mais uma vez. Para isso, o comando que estamos utilizando foi anexado abaixo. Esta consulta está usando o método find () para recuperar todos os documentos em uma coleção chamada "resultado". O método find () é usado para retornar uma variedade de documentos na coleção "resultado" que corresponde à consulta especificada. Nesse caso, nenhuma consulta é especificada. Então, todos os 15 documentos da coleção "resultado" são retornados. Os documentos de saída contêm três campos: _id, std e pontuação. O campo _id é um identificador exclusivo atribuído a cada documento por MongoDB, o campo STD contém o nome do aluno, e o campo de pontuação contém a pontuação do teste para cada aluno.

Teste> dB.Resultado.encontrar()
[[
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', pontuação: 56,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', pontuação: 77,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', pontuação: 32,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'Robert', pontuação: 96,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', pontuação: 12
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', pontuação: 76,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', pontuação: 87,
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', pontuação: 52,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'Robert', pontuação: 99,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', pontuação: 42
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', pontuação: 32,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', pontuação: 67,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', pontuação: 42,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'Robert', pontuação: 89,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', pontuação: -2
]

Exemplo # 01: classificação em ordem decrescente

Este comando está usando o método agregate () para executar uma operação de agregação em uma coleção chamada "resultado" em um banco de dados MongoDB. O método agregate () toma uma matriz como seu argumento, onde cada estágio transforma os dados. Nesse caso, a primeira etapa do pipeline está usando o operador $ setWindowfields que está definindo os campos de janela, particionando os documentos pelo campo "STD", classificando os documentos pelo campo "pontuação" em ordem descendente (-1). O campo de saída é então especificado, que cria um novo campo chamado "RankScoreforstd" e atribui uma classificação a cada documento em sua janela usando o operador $ rank.

A saída final mostra os documentos na coleção "resultado" com o campo adicional "RankScoreStorstd" adicionado a cada documento, indicando a classificação do aluno com base em sua pontuação. Os registros são classificados em ordem decrescente de pontuação e agrupados pelo nome do aluno. Nesse caso, o script está classificando os alunos com base em suas pontuações. O aluno com a maior pontuação recebe uma classificação de 1, o aluno com a segunda pontuação mais alta recebe uma classificação de 2 e assim por diante.

Teste> dB.Resultado.agregado ([$ setWindowfields: Partitionby: "$ std", Sortby: score: -1, saída: rankscoreforstd: $ rank: ])
[[
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', pontuação: 52, rankscoreforstd: 1,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', pontuação: 42, rankscoreforstd: 2,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', pontuação: 32, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', pontuação: 87, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', pontuação: 77, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', pontuação: 67, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', pontuação: 42, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', pontuação: 12, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', pontuação: -2, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', pontuação: 76, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', pontuação: 56, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', pontuação: 32, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'Robert', pontuação: 99, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'Robert', pontuação: 96, ranksCoreSTD: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'Robert', pontuação: 89, ranksCorestd: 3
]

Exemplo # 02: classificação em ordem crescente

Na ilustração acima, classificamos os documentos em ordem decrescente do campo de pontuação usando o valor da pontuação "-1". Desta vez, realizaremos uma operação de classificação em todos os documentos em ordem crescente do campo de pontuação. Para isso, há uma pequena modificação no mesmo comando agregado, começando pelo método agregate () que é usado para processar dados e retornar o resultado na forma de um ou mais documentos.

O operador $ setWindowfields é usado para adicionar um novo campo a cada documento com base na função de janela especificada. O comando está definindo os campos da janela, particionando os documentos pelo campo "DST", classificando os documentos pelo campo "pontuação" em ordem crescente (1) usando o valor "1" e depois adicionando um novo campo chamado "RankScoreforstd" que atribui uma classificação a cada documento com base na pontuação. A saída mostra uma matriz de todos os documentos na coleção "resultado", com um campo adicional "RankScoreForstd" para cada documento. Nesse caso, cada aluno recebe uma classificação única e os documentos são classificados em ordem crescente da pontuação.

Teste> dB.Resultado.agregado ([$ setWindowfields: Partitionby: "$ std", Sortby: score: 1, saída: rankScoreforstd: $ rank: ]))
[[
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', pontuação: 32, rankscoreforstd: 1,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', pontuação: 42, rankscoreforstd: 2,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', pontuação: 52, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', pontuação: 67, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', pontuação: 77, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', pontuação: 87, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', pontuação: -2, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', pontuação: 12, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', pontuação: 42, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', pontuação: 26, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', pontuação: 56, rankscoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', pontuação: 76, rankscoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'Robert', pontuação: 89, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'Robert', pontuação: 96, ranksCoreSTD: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'Robert', pontuação: 99, ranksCoreSTD: 3
]

Conclusão

Depois de apresentar o operador de classificação do MongoDB, discutimos seu uso em MongoDB. Depois disso, criamos um ambiente para trabalhar e adicionamos exemplos do MongoDB para ilustrar o uso do operador de classificação com mais precisão. O primeiro exemplo mostra o uso do operador de classificação com o valor "-1" para exibir os documentos em ordem decrescente. Enquanto o segundo exemplo cobre seu uso com o valor "1" para exibir e classificar os documentos em ordem crescente de coleta.