View a markdown version of this page

$min - 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.

$min

Der $min Aggregationsoperator gibt den Mindestwert eines angegebenen Felds in einer Reihe von Dokumenten zurück. Dieser Operator ist nützlich, um den niedrigsten Wert in einer Reihe von Dokumenten zu finden.

Parameter

  • expression: Der auszuwertende Ausdruck. Dies kann ein Feldpfad, eine Variable oder ein beliebiger Ausdruck sein, der in einen Wert aufgelöst wird.

Beispiel (MongoDB Shell)

Das folgende Beispiel zeigt die Verwendung des $min Operators, um den Mindestwert des age Felds in mehreren Dokumenten zu ermitteln.

Erstellen Sie Beispieldokumente

db.users.insertMany([ { name: "John", age: 35 }, { name: "Jane", age: 28 }, { name: "Bob", age: 42 }, { name: "Alice", age: 31 } ]);

Beispiel für eine Abfrage

db.users.aggregate([ { $group: { _id: null, minAge: { $min: "$age" } } }, { $project: { _id: 0, minAge: 1 } } ])

Ausgabe

[ { minAge: 28 } ]

Beispiel für die Verwendung von Fensteroperatoren (MongoDB Shell)

Neu ab Version 8.0.2.

Der $min Operator kann auch als Fensterbediener auf der $setWindowFields Bühne verwendet werden. In diesem Zusammenhang gibt es den Mindestwert für die Dokumente in jedem Fenster zurück. Sie geben den Operator unter dem output Feld an und definieren optional die Fenstergrenzen mit einem window Dokument.

Anmerkung

Bei Verwendung als Fensteroperator in $setWindowFields $min ist er auf 100 MB an Zwischendaten begrenzt. Eine Operation, die dieses Limit überschreitet, gibt einen Fehler zurück.

Erstellen Sie Beispieldokumente

db.stockPrices.insertMany([ { _id: 1, ticker: "ABC", hour: 1, price: 50 }, { _id: 2, ticker: "ABC", hour: 2, price: 45 }, { _id: 3, ticker: "ABC", hour: 3, price: 60 }, { _id: 4, ticker: "ABC", hour: 4, price: 40 }, { _id: 5, ticker: "XYZ", hour: 1, price: 30 }, { _id: 6, ticker: "XYZ", hour: 2, price: 35 }, { _id: 7, ticker: "XYZ", hour: 3, price: 25 } ]);

Beispiel für eine Abfrage

Das folgende Beispiel partitioniert die Dokumente nachticker, sortiert jede Partition nach und gibt den niedrigsten Preis zurückhour, der vom Anfang der Partition bis zum aktuellen Dokument angezeigt wurde.

db.stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { lowestSoFar: { $min: "$price", window: { documents: ["unbounded", "current"] } } } } } ]);

Ausgabe

[ { "_id": 1, "ticker": "ABC", "hour": 1, "price": 50, "lowestSoFar": 50 }, { "_id": 2, "ticker": "ABC", "hour": 2, "price": 45, "lowestSoFar": 45 }, { "_id": 3, "ticker": "ABC", "hour": 3, "price": 60, "lowestSoFar": 45 }, { "_id": 4, "ticker": "ABC", "hour": 4, "price": 40, "lowestSoFar": 40 }, { "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30, "lowestSoFar": 30 }, { "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35, "lowestSoFar": 30 }, { "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25, "lowestSoFar": 25 } ]

Jedes Dokument wird um das aktuelle Dokument erweitertlowestSoFar, wobei das aktuelle Minimum price innerhalb seiner Partition bis einschließlich des aktuellen Dokuments liegt.

Codebeispiele

Um ein Codebeispiel für die Verwendung des $min Operators anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten. Die folgenden Beispiele zeigen sowohl die Verwendung des Akkumulators (in$group) als auch die Verwendung von Fensteroperatoren (in$setWindowFields):

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); // Accumulator usage: minimum value across a group const users = db.collection('users'); await users.insertMany([ { name: "John", age: 35 }, { name: "Jane", age: 28 }, { name: "Bob", age: 42 }, { name: "Alice", age: 31 } ]); const accumulatorResult = await users.aggregate([ { $group: { _id: null, minAge: { $min: "$age" } } } ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Window operator usage: running minimum within each partition const stockPrices = db.collection('stockPrices'); await stockPrices.insertMany([ { _id: 1, ticker: "ABC", hour: 1, price: 50 }, { _id: 2, ticker: "ABC", hour: 2, price: 45 }, { _id: 3, ticker: "ABC", hour: 3, price: 60 }, { _id: 4, ticker: "ABC", hour: 4, price: 40 }, { _id: 5, ticker: "XYZ", hour: 1, price: 30 }, { _id: 6, ticker: "XYZ", hour: 2, price: 35 }, { _id: 7, ticker: "XYZ", hour: 3, price: 25 } ]); const windowResult = await stockPrices.aggregate([ { $setWindowFields: { partitionBy: "$ticker", sortBy: { hour: 1 }, output: { lowestSoFar: { $min: "$price", window: { documents: ["unbounded", "current"] } } } } } ]).toArray(); console.log('Window result:', windowResult); 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') db = client['test'] # Accumulator usage: minimum value across a group users = db.users users.insert_many([ { "name": "John", "age": 35 }, { "name": "Jane", "age": 28 }, { "name": "Bob", "age": 42 }, { "name": "Alice", "age": 31 } ]) accumulator_result = list(users.aggregate([ { "$group": { "_id": None, "minAge": { "$min": "$age" } } } ])) print('Accumulator result:', accumulator_result) # Window operator usage: running minimum within each partition stock_prices = db.stockPrices stock_prices.insert_many([ { "_id": 1, "ticker": "ABC", "hour": 1, "price": 50 }, { "_id": 2, "ticker": "ABC", "hour": 2, "price": 45 }, { "_id": 3, "ticker": "ABC", "hour": 3, "price": 60 }, { "_id": 4, "ticker": "ABC", "hour": 4, "price": 40 }, { "_id": 5, "ticker": "XYZ", "hour": 1, "price": 30 }, { "_id": 6, "ticker": "XYZ", "hour": 2, "price": 35 }, { "_id": 7, "ticker": "XYZ", "hour": 3, "price": 25 } ]) window_result = list(stock_prices.aggregate([ { "$setWindowFields": { "partitionBy": "$ticker", "sortBy": { "hour": 1 }, "output": { "lowestSoFar": { "$min": "$price", "window": { "documents": ["unbounded", "current"] } } } } } ])) print('Window result:', window_result) client.close() example()