$densify

$densify Toplama işlem hattındaki aşama, bir değer dizisi içindeki eksik veri noktalarını doldurmak için kullanılır. Belirtilen alan, aralık ve adım temelinde eksik değerler oluşturarak daha eksiksiz bir veri kümesi oluşturmanıza yardımcı olur. Bu, doğru analiz sağlamak için veri noktalarındaki boşlukların doldurulması gereken zaman serisi veri analizi gibi senaryolarda kullanışlıdır.

Sözdizimi

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

Parametreler

Parametre Description
field Densification işleminin gerçekleştirildiği alan.
range.step Eksik değerler oluşturmaya yönelik adım boyutu.
range.unit (İsteğe bağlı) Zaman birimleri (örneğin, "saat", "gün") gibi adım boyutunun birimi.
range.bounds (İsteğe bağlı) Densification için aralığı (alt ve üst sınırlar) belirtir.
partitionByFields (İsteğe bağlı) Verileri densification için gruplandırmak için kullanılan alanlar.

Ö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: Zaman serisi veri kümesini reddedin

Bu sorgu, tarih alanındaki eksik günleri doldurur.

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

Bu sorgu aşağıdaki sonuçları döndürür:

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

Örnek 2: Sayısal verileri reddedin

Bu sorgu, alandaki eksik sayısal değerleri sales.fullSales doldurur:

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

Bu sorgu aşağıdaki sonuçları döndürür:

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

Sınırlamalar

Aşağıdaki tabloda, toplama işlem hatlarındaki $densify aşamasıyla ilişkili temel kısıtlamalar ve davranışlar özetlemektedir:

Kategori Koşul / Davranış
Alan Kısıtlamaları - Herhangi bir belgenin tarih değeri varsa ve unitbelirtilmemişse hatalar.
- Herhangi bir belge sayısal değere sahipse ve unitbelirtilmişse hatalar.
- Alan adı ile $başlar. Yeniden adlandırmak için kullanın $project .
partitionByFields - Herhangi bir alan dize olmayan bir değer olarak değerlendirilir.
- Alan adı ile $başlar.
range.bounds - Alt sınır , var olan belgelerden bağımsız olarak başlangıç değerini tanımlar.
- Alt sınır kapsayıcıdır.
- Üst sınır özeldir.
- $densify sınırların dışındaki belgeleri filtrelemez .