View a markdown version of this page

$ Dense Rang - Amazon DocumentDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

$ Dense Rang

Nouveau depuis la version 8.0.2.

L'opérateur de $denseRank fenêtre d'Amazon DocumentDB renvoie la position de chaque document au sein de sa partition, conformément à l'sortByordre des $setWindowFields étapes. Les documents ayant la même sortBy valeur reçoivent le même rang, et la valeur distincte suivante utilise la position immédiatement suivante, sans laisser d'espace (par exemple,1, 2, 2, 3). Il est spécifié dans le output champ de la $setWindowFields scène.

Il s'agit d'un opérateur de fenêtre qui n'est utilisé que dans la $setWindowFields scène.

Paramètres

  • $denseRankprend un document vide {} comme valeur.

  • Il n'accepte pas de window cadre.

  • Cela nécessite exactement une sortBy clé dans l'$setWindowFieldsétape.

Exemple (MongoDB Shell)

L'exemple suivant partitionne les documents pargame, trie chaque partition par score ordre décroissant et attribue à chaque joueur un rang dense.

Créez des exemples de documents

db.players.insertMany([ { _id: 1, game: "A", player: "Alice", score: 90 }, { _id: 2, game: "A", player: "Bob", score: 85 }, { _id: 3, game: "A", player: "Carol", score: 85 }, { _id: 4, game: "A", player: "Dave", score: 70 }, { _id: 5, game: "B", player: "Erin", score: 95 }, { _id: 6, game: "B", player: "Frank", score: 80 } ]);

Exemple de requête

db.players.aggregate([ { $setWindowFields: { partitionBy: "$game", sortBy: { score: -1 }, output: { denseRank: { $denseRank: {} } } } } ]);

Sortie

[ { "_id": 1, "game": "A", "player": "Alice", "score": 90, "denseRank": 1 }, { "_id": 2, "game": "A", "player": "Bob", "score": 85, "denseRank": 2 }, { "_id": 3, "game": "A", "player": "Carol", "score": 85, "denseRank": 2 }, { "_id": 4, "game": "A", "player": "Dave", "score": 70, "denseRank": 3 }, { "_id": 5, "game": "B", "player": "Erin", "score": 95, "denseRank": 1 }, { "_id": 6, "game": "B", "player": "Frank", "score": 80, "denseRank": 2 } ]

Au sein de chaque game partition, les joueurs sont classés par ordre décroissantscore. Bob et Carol sont à égalité 85 et se partagent le classement2, et Dave suit 3 au classement sans écart.

Exemples de code

Pour afficher un exemple de code permettant d'utiliser l'$denseRankopérateur dans la $setWindowFields scène, choisissez l'onglet correspondant à la langue que vous souhaitez utiliser :

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = new MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); try { await client.connect(); const db = client.db('test'); const players = db.collection('players'); await players.insertMany([ { _id: 1, game: "A", player: "Alice", score: 90 }, { _id: 2, game: "A", player: "Bob", score: 85 }, { _id: 3, game: "A", player: "Carol", score: 85 }, { _id: 4, game: "A", player: "Dave", score: 70 }, { _id: 5, game: "B", player: "Erin", score: 95 }, { _id: 6, game: "B", player: "Frank", score: 80 } ]); const result = await players.aggregate([ { $setWindowFields: { partitionBy: "$game", sortBy: { score: -1 }, output: { denseRank: { $denseRank: {} } } } } ]).toArray(); console.log(result); } finally { await client.close(); } } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') try: db = client['test'] players = db['players'] players.insert_many([ { '_id': 1, 'game': 'A', 'player': 'Alice', 'score': 90 }, { '_id': 2, 'game': 'A', 'player': 'Bob', 'score': 85 }, { '_id': 3, 'game': 'A', 'player': 'Carol', 'score': 85 }, { '_id': 4, 'game': 'A', 'player': 'Dave', 'score': 70 }, { '_id': 5, 'game': 'B', 'player': 'Erin', 'score': 95 }, { '_id': 6, 'game': 'B', 'player': 'Frank', 'score': 80 } ]) result = list(players.aggregate([ { '$setWindowFields': { 'partitionBy': '$game', 'sortBy': { 'score': -1 }, 'output': { 'denseRank': { '$denseRank': {} } } } } ])) print(result) finally: client.close() example()