$dateTrunc

İfade $dateTrunc işleci bir tarihi belirtilen en yakın birime (örneğin, saat, gün, ay) kısaltır. Zaman serisi verileriyle çalışırken veya verileri belirli zaman aralıklarına göre gruplandırırken kullanışlıdır. Bu işleç, tarih hesaplamalarını basitleştirmek ve standartlaştırmak için kullanılabilir.

Sözdizimi

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

Parametreler

Parametre Description
date Kesecek tarih.
unit Tarihin kesilmesi için birim. Desteklenen değerler , , , , , , , yearmonthve weekdeğerlerini içerirday. hourminutesecondmillisecond
binSize (İsteğe bağlı) Kesme için her bir bölmenin boyutu. Örneğin, binSize 2 ve unit ise hour, tarih 2 saatte bir kesilir.
timezone (İsteğe bağlı) Kesme için kullanılacak saat dilimi. Belirtilmezse varsayılan olarak UTC olur.

Örnekler

Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.

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

Örnek 1: Güne kesme

Bu sorgu, utc'de $dateTrunc zaman damgasını günün başlangıcına (00:00:00) kesmek için kullanırlastUpdated. işleç, zaman fark etmeksizin verileri takvim gününe göre gruplandırma veya karşılaştırma için kullanışlıdır.

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

Bu sorgu aşağıdaki sonucu döndürür.

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

Örnek 2: Haftanın başına kadar kesme

Bu sorgu $dateTrunc , zaman damgasını lastUpdated hafta başına kadar aşağı yuvarlar. Takvim hizalamasının tutarlı olmasını sağlamak için haftanın başlangıcı olarak Pazartesi'yi belirtir.

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

Bu sorgu aşağıdaki sonucu döndürür.

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