Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die $densify
Phase in einer Aggregationspipeline wird verwendet, um fehlende Datenpunkte innerhalb einer Abfolge von Werten auszufüllen. Sie hilft beim Erstellen eines vollständigeren Datasets, indem fehlende Werte basierend auf einem angegebenen Feld, Bereich und Schritt generiert werden. Dies ist besonders nützlich in Szenarien wie zeitreihenbasierte Datenanalysen, bei denen Lücken in Datenpunkten ausgefüllt werden müssen, um eine genaue Analyse sicherzustellen.
Syntax
{
$densify: {
field: <field>,
range: {
step: <number>,
unit: <string>, // Optional, e.g., "hour", "day", "month", etc.
bounds: [<lowerBound>, <upperBound>] // Optional
},
partitionByFields: [<field1>, <field2>, ...] // Optional
}
}
Die Parameter
Parameter | BESCHREIBUNG |
---|---|
field |
Das Feld, auf dem die Verdichteung ausgeführt wird. |
range.step |
Die Schrittgröße zum Generieren fehlender Werte. |
range.unit |
(Optional) Die Einheit der Schrittgröße, z. B. Zeiteinheiten (z. B. "Stunde", "Tag"). |
range.bounds |
(Optional) Gibt den Bereich (untere und obere Begrenzungen) für die Verdichteung an. |
partitionByFields |
(Optional) Felder, die zum Gruppieren von Daten zur Verdichteung verwendet werden. |
Beispiele
Beispiel 1: Densify a time-series dataset
Die folgende Pipeline füllt fehlende Tage im Datumsfeld aus:
db.aggregate([
{
$documents: [
{ date: new ISODate("2024-01-01"), value: 10 },
{ date: new ISODate("2024-01-03"), value: 15 }
]
},
{
$densify: {
field: "date",
range: {
step: 1,
unit: "day",
bounds: "full"
}
}
}
]);
Diese Abfrage würde das folgende Dokument zurückgeben.
[
{ date: ISODate("2024-01-01T00:00:00.000Z"), value: 10 },
{ date: ISODate("2024-01-02T00:00:00.000Z") },
{ date: ISODate("2024-01-03T00:00:00.000Z"), value: 15 }
]
Beispiel 2: Verweigerung numerischer Daten
Die folgende Pipeline füllt fehlende numerische Werte im sales.fullSales
Feld aus:
db.aggregate([
{
$documents: [
{ level: 1, score: 10 },
{ level: 3, score: 30 }
]
},
{
$densify: {
field: "level",
range: {
step: 1,
bounds: [1, 5]
}
}
}
]);
Diese Abfrage würde das folgende Dokument zurückgeben.
[
{ level: 1, score: 10 },
{ level: 2 },
{ level: 3, score: 30 },
{ level: 4 }
]
Einschränkungen
In der folgenden Tabelle sind die wichtigsten Einschränkungen und Verhaltensweisen zusammengefasst, die der $densify Phase in MongoDB-Aggregationspipelines zugeordnet sind:
Kategorie | Bedingung/Verhalten |
---|---|
Feldeinschränkungen | - Fehler, wenn ein Dokument einen Datumswert aufweist und unit nicht angegeben ist. – Fehler, wenn ein Dokument einen numerischen Wert aufweist und unit angegeben wird. - Feldname beginnt mit $ . Wird $project verwendet, um ihn umzubenennen. |
partitionByFields | - Jedes Feld wird zu einem Wert ohne Zeichenfolge ausgewertet. - Feldname beginnt mit $ . |
range.bounds |
-
Untere Grenze definiert den Startwert unabhängig von vorhandenen Dokumenten. - Die untere Grenze ist inklusive. - Obere Grenze ist exklusiv. - $densify
Filtert Dokumente nicht außerhalb der Grenzen aus. |
Verwandte Inhalte
- Prüfen Sie die Optionen für die Migration von MongoDB zu Azure Cosmos DB for MongoDB (virtueller Kern).
- Erfahren Sie mehr über die Featurekompatibilität mit MongoDB