Sdílet prostřednictvím


$densify (agregace)

Fáze $densify v kanálu agregace slouží k vyplnění chybějících datových bodů v posloupnosti hodnot. Pomáhá při vytváření ucelenější datové sady generováním chybějících hodnot na základě zadaného pole, rozsahu a kroku. To je zvlášť užitečné ve scénářích, jako je analýza dat časových řad, kde je potřeba vyplnit mezery v datových bodech, aby se zajistila přesná analýza.

Syntaxe

{
  $densify: {
    field: <field>,
    range: {
      step: <number>,
      unit: <string>, // Optional, e.g., "hour", "day", "month", etc.
      bounds: [<lowerBound>, <upperBound>] // Optional
    },
    partitionByFields: [<field1>, <field2>, ...] // Optional
  }
}

Parametry

Parametr Popis
field Pole, na kterém se provádí denifikace.
range.step Velikost kroku pro generování chybějících hodnot.
range.unit (Volitelné) Jednotka velikosti kroku, například časové jednotky (např. "hodina", "den").
range.bounds (Volitelné) Určuje rozsah (dolní a horní mez) pro densifikace.
partitionByFields (Volitelné) Pole použitá k seskupení dat pro densifikace.

Příklady

Příklad 1: Densify a time-series dataset

Následující kanál vyplní chybějící dny v poli kalendářního data:

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

Tento dotaz by vrátil následující dokument.

[
  { 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 }
]

Příklad 2: Densify numerická data

Následující kanál vyplní chybějící číselné hodnoty v sales.fullSales poli:

db.aggregate([
    {
      $documents: [
        { level: 1, score: 10 },
        { level: 3, score: 30 }
      ]
    },
    {
      $densify: {
        field: "level",
        range: {
          step: 1,
          bounds: [1, 5] 
        }
      }
    }
  ]);

Tento dotaz by vrátil následující dokument.

[
  { level: 1, score: 10 },
  { level: 2 },
  { level: 3, score: 30 },
  { level: 4 }
]

Omezení

Následující tabulka shrnuje klíčová omezení a chování související s fází $densify v kanálech agregace MongoDB:

Kategorie Podmínka / chování
Omezení polí – Chyby, pokud některý dokument obsahuje hodnotu data a unitnení zadán.
– Chyby, pokud některý dokument obsahuje číselnou hodnotu a unit je zadán.
- Název pole začíná na $. Slouží $project k přejmenování.
partitionByFields – Jakékoli pole se vyhodnotí jako neřetězcová hodnota.
- Název pole začíná na $.
range.bounds - Dolní mez definuje počáteční hodnotu bez ohledu na existující dokumenty.
- Dolní mez je inkluzivní.
- Horní mez je výhradní.
- $densify nefiltruje dokumenty mimo hranice.