$dateTrunc

De $dateTrunc expressie-operator kapt een datum af naar de dichtstbijzijnde opgegeven eenheid (bijvoorbeeld uur, dag, maand). Het is handig bij het werken met tijdreeksgegevens of bij het groeperen van gegevens op specifieke tijdsintervallen. Deze operator kan worden gebruikt om datumberekeningen te vereenvoudigen en te standaardiseren.

Syntaxis

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

Parameterwaarden

Kenmerk Description
date De datum die moet worden afgekapt.
unit De eenheid waarop de datum moet worden afgekapt. Ondersteunde waarden zijn onder andere year, , monthweek, day, hour, minute, en secondmillisecond.
binSize (Optioneel) De grootte van elke bin voor afkapping. Als dit bijvoorbeeld binSize 2 is en unit is hour, wordt de datum elke 2 uur afgekapt.
timezone (Optioneel) De tijdzone die moet worden gebruikt voor afkapping. De standaardinstelling is UTC als deze niet is opgegeven.

Voorbeelden

Bekijk dit voorbeelddocument uit de winkelverzameling.

{
    "_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
                }
            ]
        }
    ]
}

Voorbeeld 1: Afkappen tot de dag

Deze query gebruikt $dateTrunc om de lastUpdated tijdstempel af te kapen tot het begin van de dag (00:00:00) in UTC. De operator is handig voor het groeperen of vergelijken van gegevens per kalenderdag, ongeacht de tijd.

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

Deze query retourneert het volgende resultaat.

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

Voorbeeld 2: Afkappen tot het begin van de week

Deze query gebruikt $dateTrunc om de lastUpdated tijdstempel naar beneden af te ronden tot het begin van de week. Hiermee wordt maandag opgegeven als het begin van de week om een consistente agenda-uitlijning te garanderen.

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

Deze query retourneert het volgende resultaat.

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