Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
$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 . |