

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.

# $ Perzentil
<a name="percentile"></a>

Neu ab Version 8.0.1.

Der `$percentile` Operator in Amazon DocumentDB berechnet angegebene Perzentilwerte für numerische Daten. Als Akkumulator berechnet er in der Phase einer Aggregationspipeline Perzentilwerte für Dokumente innerhalb einer Gruppe. `$group` Als Ausdruck berechnet er Perzentile für eine Reihe von Zahlen.

**Parameter**
+ `input`: Ein Ausdruck, der in einen numerischen Wert oder ein Array numerischer Werte aufgelöst wird.
+ `p`: Ein Array von Perzentilwerten zwischen 0 und 1, wobei jeder Wert ein zu berechnendes Perzentil darstellt. `[0.25, 0.5, 0.75]`Berechnet beispielsweise das 25., 50. und 75. Perzentil.
+ `method`: Eine Zeichenfolge, die die Berechnungsmethode angibt. Derzeit wird nur `"approximate"` unterstützt.

## Behavior
<a name="percentile-behavior"></a>

Die `"approximate"` Methode verwendet den T-Digest-Algorithmus zur Berechnung ungefährer, perzentilbasierter Metriken. Bei kleinen Datensätzen können unterschiedliche Perzentilwerte zu demselben Ergebnis führen. Beispiel: Bei nur 5 Werten pro Gruppe geben p90 und p99 möglicherweise beide den Maximalwert in der Gruppe zurück. Die Genauigkeit verbessert sich, wenn die Anzahl der Datenpunkte zunimmt.

## Beispiel (MongoDB Shell)
<a name="percentile-examples"></a>

Das folgende Beispiel zeigt, wie der `$percentile` Operator verwendet wird, um das 25. und 75. Perzentil der Ergebnisse pro Klasse zu berechnen.

**Erstellen Sie Beispieldokumente **

```
db.students.insertMany([
  { class: "A", score: 72 },
  { class: "A", score: 85 },
  { class: "A", score: 90 },
  { class: "A", score: 68 },
  { class: "A", score: 95 },
  { class: "B", score: 80 },
  { class: "B", score: 75 },
  { class: "B", score: 92 },
  { class: "B", score: 88 },
  { class: "B", score: 70 }
]);
```

**Beispiel für eine Abfrage **

```
db.students.aggregate([
  { $group: {
      _id: "$class",
      percentiles: { $percentile: { input: "$score", p: [0.25, 0.75], method: "approximate" } }
    }}
]);
```

**Ausgabe**

```
[
  { "_id": "A", "percentiles": [72, 90] },
  { "_id": "B", "percentiles": [75, 88] }
]
```

## Beispiel für die Verwendung von Ausdrücken (MongoDB Shell)
<a name="percentile-expression-examples"></a>

Der `$percentile` Operator kann auch als Ausdruck innerhalb einer `$project` Stufe verwendet werden, um Perzentile eines Array-Feldes zu berechnen.

**Erstellen Sie Beispieldokumente **

```
db.surveys.insertMany([
  { _id: 1, responses: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] },
  { _id: 2, responses: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] }
]);
```

**Beispiel für eine Abfrage **

```
db.surveys.aggregate([
  { $project: {
      quartiles: { $percentile: { input: "$responses", p: [0.25, 0.5, 0.75], method: "approximate" } }
    }}
]);
```

**Ausgabe**

```
[
  { "_id": 1, "quartiles": [6, 10, 16] },
  { "_id": 2, "quartiles": [5, 9, 15] }
]
```

## Codebeispiele
<a name="percentile-code"></a>

Um ein Codebeispiel für die Verwendung des `$percentile` Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen sowohl die Verwendung von Akkumulatoren (in`$group`) als auch die Verwendung von Ausdrücken (in`$project`):

------
#### [ Node.js ]

```
const { MongoClient } = require('mongodb');

async function example() {
  const uri = 'mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false';
  const client = new MongoClient(uri);

  try {
    await client.connect();
    const db = client.db('test');

    // Accumulator usage: percentiles across grouped documents
    const students = db.collection('students');
    const accumulatorResult = await students.aggregate([
      { $group: {
          _id: "$class",
          percentiles: { $percentile: { input: "$score", p: [0.25, 0.75], method: "approximate" } }
        }}
    ]).toArray();
    console.log('Accumulator result:', accumulatorResult);

    // Expression usage: percentiles of an array field
    const surveys = db.collection('surveys');
    const expressionResult = await surveys.aggregate([
      { $project: {
          quartiles: { $percentile: { input: "$responses", p: [0.25, 0.5, 0.75], method: "approximate" } }
        }}
    ]).toArray();
    console.log('Expression result:', expressionResult);

  } 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']

        # Accumulator usage: percentiles across grouped documents
        students = db['students']
        accumulator_result = list(students.aggregate([
            { '$group': {
                '_id': '$class',
                'percentiles': { '$percentile': { 'input': '$score', 'p': [0.25, 0.75], 'method': 'approximate' } }
            }}
        ]))
        print('Accumulator result:', accumulator_result)

        # Expression usage: percentiles of an array field
        surveys = db['surveys']
        expression_result = list(surveys.aggregate([
            { '$project': {
                'quartiles': { '$percentile': { 'input': '$responses', 'p': [0.25, 0.5, 0.75], 'method': 'approximate' } }
            }}
        ]))
        print('Expression result:', expression_result)

    finally:
        client.close()

example()
```

------