Freigeben über


$dateFromParts

Der $dateFromParts Operator erstellt ein Datum aus einzelnen Komponenten wie Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden. Dieser Operator kann beim Umgang mit Daten hilfreich sein, die Datumskomponenten separat speichern.

Syntax

{
    $dateFromParts: {
        year: < year > ,
        month: < month > ,
        day: < day > ,
        hour: < hour > ,
        minute: < minute > ,
        second: < second > ,
        millisecond: < millisecond > ,
        timezone: < timezone >
    }
}

Die Parameter

Parameter Description
year Die Jahreskomponente des Datums.
month Die Monatskomponente des Datums.
day Die Tageskomponente des Datums.
hour Die Stundenkomponente des Datums.
minute Die Minutenkomponente des Datums.
second Die zweite Komponente des Datums.
millisecond Die Millisekundenkomponente des Datums.
timezone Wahlfrei. Eine Zeitzonenspezifikation.

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: Erstellen eines Anfangstermins

Mit dieser Abfrage werden genaue StartDate- und EndDate-Werte aus geschachtelten Feldern erstellt $dateFromParts. Anschließend wird die Ereignisdauer in Tagen berechnet. Sie hilft beim Standardisieren und Analysieren von Ereigniszeitachsen, die in fragmentierten Datumsformaten gespeichert sind.

db.stores.aggregate([
  { 
    $match: { _id: "e6410bb3-843d-4fa6-8c70-7472925f6d0a" } 
  },
  { 
    $unwind: "$promotionEvents" 
  },
  {
    $project: {
      _id: 1,
      startDate: {
        $dateFromParts: {
          year: "$promotionEvents.promotionalDates.startDate.Year",
          month: "$promotionEvents.promotionalDates.startDate.Month",
          day: "$promotionEvents.promotionalDates.startDate.Day"
        }
      }
    }
  }
])

Diese Abfrage gibt das folgende Ergebnis zurück.

[
  {
    "_id": "e6410bb3-843d-4fa6-8c70-7472925f6d0a",
    "startDate": "2024-09-21T00:00:00.000Z"
  }
]