View a markdown version of this page

$ Rang - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

$ Rang

Neu ab Version 8.0.2.

Der $rank Fensteroperator in Amazon DocumentDB gibt die Position jedes Dokuments innerhalb seiner Partition entsprechend der Reihenfolge der $setWindowFields Phasen sortBy zurück. Dokumente mit demselben sortBy Wert erhalten denselben Rang, und beim nächsten eindeutigen Wert werden die dazwischenliegenden Positionen übersprungen, sodass Lücken entstehen (z. B.). 1, 2, 2, 4 Er wird unter dem output Feld der $setWindowFields Stufe angegeben.

Es ist ein Fensteroperator, der nur auf der $setWindowFields Bühne verwendet wird.

Parameter

  • $ranknimmt ein leeres Dokument {} als Wert an.

  • Es akzeptiert keinen window Frame.

  • Es wird genau ein sortBy Schlüssel auf der $setWindowFields Bühne benötigt.

Beispiel (MongoDB Shell)

Das folgende Beispiel partitioniert die Dokumente nachgame, sortiert jede Partition score in absteigender Reihenfolge und weist jedem Spieler einen Rang zu.

Erstellen Sie Beispieldokumente

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 } ]);

Beispiel für eine Abfrage

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

Ausgabe

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

Innerhalb jeder game Partition werden die Spieler absteigend sortiertscore. Bob und Carol liegen gleichauf 85 und teilen sich den Rang2, sodass der nächste Rang an Dave übergeht. 4

Codebeispiele

Um ein Codebeispiel für die Verwendung des $rank Operators in der $setWindowFields Phase anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten:

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: { rank: { $rank: {} } } } } ]).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': { 'rank': { '$rank': {} } } } } ])) print(result) finally: client.close() example()