$dateTrunc

Der $dateTrunc Ausdrucksoperator schneidet ein Datum auf die nächste angegebene Einheit ab (z. B. Stunde, Tag, Monat). Es ist nützlich, wenn Sie mit Zeitreihendaten arbeiten oder Daten nach bestimmten Zeitintervallen gruppieren. Dieser Operator kann verwendet werden, um Datumsberechnungen zu vereinfachen und zu standardisieren.

Syntax

  $dateTrunc: {
    date: <dateExpression>,
    unit: "<unit>",
    binSize: <number>,       // optional
    timezone: "<timezone>",  // optional
    startOfWeek: "<day>"     // optional (used when unit is "week")
  }

Die Parameter

Parameter Description
date Das Datum, das abgeschnitten werden soll.
unit Die Einheit, in der das Datum abgeschnitten werden soll. Zu den unterstützten Werten gehören year: , month, week, day, hour, minute, , und secondmillisecond.
binSize (Optional) Die Größe der einzelnen Fächer zum Abschneiden. Wenn beispielsweise binSize "2" ist und unit "2" lautet hour, wird das Datum alle 2 Stunden abgeschnitten.
timezone (Optional) Die zeitzone, die zum Abschneiden verwendet werden soll. Wenn nicht angegeben, wird standardmäßig UTC verwendet.

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Beispiel 1: Abschneiden auf den Tag

Diese Abfrage verwendet $dateTrunc , um den lastUpdated Zeitstempel am Anfang des Tages (00:00:00:00) in UTC abzuschneiden. Der Operator ist nützlich, um Daten unabhängig von der Uhrzeit nach Kalendertag zu gruppieren oder zu vergleichen.

db.stores.aggregate([
  {
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" }
  },
  {
    $project: {
      _id: 0,
      truncatedToDay: {
        $dateTrunc: {
          date: "$lastUpdated",
          unit: "day"
        }
      }
    }
  }
])

Diese Abfrage gibt das folgende Ergebnis zurück.

[
  {
    "truncatedToDay": "2024-11-29T00:00:00.000Z"
  }
]

Beispiel 2: Abschneiden am Anfang der Woche

Diese Abfrage wird verwendet $dateTrunc , um den lastUpdated Zeitstempel bis zum Anfang der Woche nach unten zu runden. Es gibt Montag als Anfang der Woche an, um eine konsistente Kalenderausrichtung sicherzustellen.

db.stores.aggregate([
  {
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" }
  },
  {
    $project: {
      _id: 0,
      truncatedToWeek: {
        $dateTrunc: {
          date: "$lastUpdated",
          unit: "week",
          startOfWeek: "Monday"
        }
      }
    }
  }
])

Diese Abfrage gibt das folgende Ergebnis zurück.

[
  {
    "truncatedToWeek": "2024-11-25T00:00:00.000Z"
  }
]