MongoDB $ Rank

MongoDB $ Rank
Ogni documento in una raccolta ha un rango distinto dall'operatore di $ Rank in MongoDB seguendo una serie di regole di smistamento. Il grado è determinato dalla sequenza dei record nel set di risultati. Viene utilizzato insieme all'operazione $ setwindowfields per aggiungere un nuovo campo con il rango fornito a ciascun record. Ciò rende semplice classificare i documenti in base a standard particolari, come i punteggi ed è utile per attività come fare classifiche o produrre rapporti sulle prestazioni.

Utilizzando una raccolta di risultati dei test come esempio, è possibile utilizzare l'operatore $ Rank per classificare i partecipanti in base ai risultati dei test. È quindi possibile utilizzare questo grado in calcoli o domande successive. Trovare gli artisti migliori e più bassi in un set di dati, oltre a confrontare le prestazioni relative di varie persone o gruppi, è significativo. Questa guida ti sta aiutando ad avere un'idea dell'uso dell'operatore di rango in MongoDB.

Crea collezione MongoDB

Prima di saltare sull'argomento, dovremmo creare un ambiente su cui lavorare. Pertanto, abbiamo già installato e configurato il database MongoDB sulla nostra macchina. Il comando seguente viene eseguito nell'interfaccia della riga di comando MongoDB. Il simbolo "test" prima del simbolo ">" indica che l'istruzione viene eseguita nel database "test". Il comando in esecuzione è “DB.createcollection ("risultato") ". Questo comando crea una nuova raccolta nel database "test" chiamato "risultato". La risposta data è "ok: 1". Ciò indica che il comando ha avuto successo e il "risultato" della raccolta è stato creato correttamente. "Test" è il nome del database utilizzato.

Test> db.createcollection ("risultato")
ok: 1

Inserisci record alla raccolta

Sebbene abbiamo creato una nuova collezione, è ancora vuota. Dobbiamo avere almeno 2 record in un "risultato" di raccolta per applicare l'operatore di rango su di esso. Il codice seguente sta inserendo più documenti in una raccolta chiamata "risultato" in un database MongoDB. Ogni record copre due campi, "std" e "punteggio". Il campo "std" rappresenta il nome di uno studente e il campo "punteggio" rappresenta il loro punteggio in un test. Il codice sta inserendo 15 documenti in totale, con ciascun documento che rappresenta uno studente diverso e il rispettivo punteggio.

Ogni documento è separato da una virgola e racchiuso in parentesi graffe . I punteggi vanno da -2 a 99 e i nomi degli studenti sono Nina, John, Eden, Robert e Lia. Ogni studente ha almeno 2 punteggi che vengono utilizzati per 2 materie diverse. L'inserimento di questi documenti è riconosciuto dal database e il codice restituisce un elenco di identificatori univoci (objectId) per ciascun documento.

Test> db.Risultato.InsertMany ([std: "nina", punteggio: 56, std: "johny", punteggio: 77, std: "eden", punteggio: 32, std: "Robert", punteggio: 96 , std: "lia", punteggio: 12, std: "nina", punteggio: 76, std: "johny", punteggio: 87, std: "eden", punteggio: 52, Std: "Robert", Score: 99, std: "Lia", Score: 42, std: "nina", punteggio: 32, std: "johny", punteggio: 67, std: "Eden", punteggio: 42, std: "Robert", punteggio: 89, std: "lia", punteggio: -2])
riconosciuto: vero,
inseritedids:
'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")

Visualizza i record MongoDB

Dopo aver inserito i 15 record con successo nel "risultato" della raccolta, daremo uno sguardo a tutti i record ancora una volta. Per questo, il comando che abbiamo utilizzato è stato allegato di seguito. Questa query utilizza il metodo Find () per recuperare tutti i documenti in una raccolta chiamata "risultato". Il metodo Find () viene utilizzato per restituire una serie di documenti nella raccolta "risultato" che corrisponde alla query specificata. In questo caso, non è specificata alcuna domanda. Quindi, vengono restituiti tutti e 15 i documenti nella raccolta. I documenti di output contengono tre campi: _id, std e punteggio. Il campo _id è un identificatore univoco assegnato a ciascun documento da MongoDB, il campo STD contiene il nome dello studente e il campo SCOPO contiene il punteggio di prova per ogni studente.

Test> db.Risultato.Trovare()
[
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', punteggio: 56,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', punteggio: 77,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', punteggio: 32,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'robert', punteggio: 96,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', punteggio: 12
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', punteggio: 76,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', punteggio: 87,
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', punteggio: 52,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'robert', punteggio: 99,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', punteggio: 42
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', punteggio: 32,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', punteggio: 67,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', punteggio: 42,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'robert', punteggio: 89,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', punteggio: -2
"

Esempio # 01: classifica in ordine decrescente

Questo comando sta usando il metodo aggregato () per eseguire un'operazione di aggregazione su una raccolta chiamata "risultato" in un database MongoDB. Il metodo aggregato () prende un array come argomento, in cui ogni fase trasforma i dati. In questo caso, la prima fase della pipeline sta utilizzando l'operatore $ setwindowfields che sta impostando i campi della finestra suddivinando i documenti dal campo "STD", ordinando i documenti dal campo "punteggio" in ordine decrescente (-1). Viene quindi specificato il campo di output, che crea un nuovo campo chiamato "RankScoreForstd" e assegna un grado a ciascun documento all'interno della sua finestra utilizzando l'operatore $ Rank.

L'output finale mostra i documenti nella raccolta di "risultati" con il campo aggiuntivo "RankScoreForstd" aggiunto a ciascun documento, indicando il grado dello studente in base al loro punteggio. I record sono ordinati in ordine decrescente di punteggio e raggruppati per nome dello studente. In questo caso, la sceneggiatura sta classificando gli studenti in base ai loro punteggi. Lo studente con il punteggio più alto ottiene un grado di 1, lo studente con il secondo punteggio più alto ottiene un grado di 2, e così via.

Test> db.Risultato.Aggregate ([$ setwindowfields: partitionby: "$ std", ordy: punteggio: -1, output: RankscoreForstd: $ Rank: ]]
[
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', punteggio: 52, rankcoreforstd: 1,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', punteggio: 42, rankcoreforstd: 2,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', punteggio: 32, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', punteggio: 87, Rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', punteggio: 77, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', punteggio: 67, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', punteggio: 42, rankcoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', punteggio: 12, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', punteggio: -2, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', punteggio: 76, rankcoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', punteggio: 56, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', punteggio: 32, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'robert', punteggio: 99, rankscoreforsd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'robert', punteggio: 96, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'robert', punteggio: 89, rankcoreforstd: 3
"

Esempio # 02: classifica in ordine crescente

Nell'illustrazione sopra, abbiamo classificato i documenti in ordine decrescente del campo di punteggio usando il valore del punteggio "-1". Questa volta eseguiremo un'operazione di rango su tutti i documenti in ordine crescente del campo SCOPO. Per questo, c'è una piccola modifica nello stesso comando aggregato, a partire dal metodo aggregato () che viene utilizzato per elaborare i dati e restituire il risultato sotto forma di uno o più documenti.

L'operatore $ setwindowfields viene utilizzato per aggiungere un nuovo campo a ciascun documento in base alla funzione finestra specificata. Il comando sta impostando i campi della finestra partizionando i documenti dal campo "std", ordinando i documenti dal campo "punteggio" nell'ordine ascendente (1) utilizzando il valore "1" e quindi aggiungendo un nuovo campo chiamato "RankScoreForstd" Assegna un grado a ciascun documento in base al punteggio. L'output mostra un array di tutti i documenti nella raccolta "Risultati", con un campo aggiuntivo "RankScoreForstd" per ciascun documento. In questo caso, a ogni studente viene assegnato un rango unico e i documenti vengono ordinati in ordine crescente del punteggio.

Test> db.Risultato.Aggregate ([$ setWindowfields: partitionby: "$ std", ordy: punteggio: 1, output: RankscoreForstd: $ Rank: ])
[
_id: objectId ("63cd0c1bf114cb71b42e38ec"), std: 'eden', punteggio: 32, rankcoreforstd: 1,
_id: objectId ("63cd0cd6f114cb71b42e38f1"), std: 'eden', punteggio: 42, rankcoreforstd: 2,
_id: objectId ("63cd0bb2f114cb71b42e38e7"), std: 'eden', punteggio: 52, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38eb"), std: 'johny', punteggio: 67, rankcoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e6"), std: 'johny', punteggio: 77, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f0"), std: 'johny', punteggio: 87, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ee"), std: 'lia', punteggio: -2, rankcoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e9"), std: 'lia', punteggio: 12, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f3"), std: 'lia', punteggio: 42, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ea"), std: 'nina', punteggio: 26, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e5"), std: 'nina', punteggio: 56, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38ef"), std: 'nina', punteggio: 76, rankcoreforstd: 3,
_id: objectId ("63cd0c1bf114cb71b42e38ed"), std: 'robert', punteggio: 89, rankscoreforstd: 1,
_id: objectId ("63cd0bb2f114cb71b42e38e8"), std: 'robert', punteggio: 96, rankcoreforstd: 2,
_id: objectId ("63cd0cd6f114cb71b42e38f2"), std: 'robert', punteggio: 99, rankcoreforstd: 3
"

Conclusione

Dopo aver introdotto l'operatore di rango MongoDB, abbiamo discusso del suo utilizzo in MongoDB. Successivamente, abbiamo creato un ambiente su cui lavorare e aggiunto esempi MongoDB per illustrare più precisamente l'uso dell'operatore di rango. Il primo esempio mostra l'uso dell'operatore di rango con il valore "-1" per visualizzare i documenti in ordine decrescente. Mentre il secondo esempio copre il suo utilizzo con il valore "1" per visualizzare e classificare i documenti in ordine crescente di raccolta.