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.
Aşama $fill , toplama işlem hattı içindeki belgelerde eksik veya null değerleri doldurmak için kullanılır. Statik değerleri, doğrusal ilişkilendirmeyi veya önceki/sonraki belgelerdeki değerleri kullanma dahil olmak üzere eksik verileri doldurmak için çeşitli yöntemler sağlar.
Sözdizimi
{
$fill: {
sortBy: <sort specification>,
partitionBy: <partition fields>,
partitionByFields: <array of partition field names>,
output: {
<field1>: { value: <expression> },
<field2>: { method: <string> }
}
}
}
Parametreler
| Parametre | Description |
|---|---|
sortBy |
Belge düzenine bağlı doldurma yöntemleri uygulanırken belgelerin sıralama düzenini belirtir. |
partitionBy |
Optional. Belgeleri bölümler halinde gruplandırma. Doldurma işlemleri her bölüme ayrı olarak uygulanır. |
partitionByFields |
Optional. Alan adları dizisi kullanan partitionBy için alternatif söz dizimi. |
output |
Doldurulacak alanları ve eksik verileri doldurmak için kullanılacak yöntemi veya değeri belirtir. |
Dolgu Yöntemleri
| Yöntem | Description |
|---|---|
value |
Belirtilen statik değer veya ifade sonucuyla doldurun. |
linear |
Bilinen değerler arasında doğrusal ilişkilendirme kullanarak doldurun (yalnızca sayısal alanlar). |
locf |
son gözlem ileri taşındı - bilinen son değeri kullanın. |
linear |
Çevreleyen değerler arasında doğrusal ilişkilendirme. |
Örnekler
Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.
{
"_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
"name": "First Up Consultants | Bed and Bath Center - South Amir",
"location": {
"lat": 60.7954,
"lon": -142.0012
},
"staff": {
"totalStaff": {
"fullTime": 18,
"partTime": 17
}
},
"sales": {
"totalSales": 37701,
"salesByCategory": [
{
"categoryName": "Mattress Toppers",
"totalSales": 37701
}
]
},
"promotionEvents": [
{
"eventName": "Price Drop Palooza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 30
}
},
"discounts": [
{
"categoryName": "Bath Accessories",
"discountPercentage": 18
},
{
"categoryName": "Pillow Top Mattresses",
"discountPercentage": 17
}
]
}
]
}
Örnek 1: Eksik değerleri statik değerle doldurma
Bu sorgu, dizideki totalSales eksik salesByCategory değerleri varsayılan 0 değeriyle doldurur.
db.stores.aggregate([{
$match: {
company: {
$in: ["First Up Consultants"]
}
}
}, {
$unwind: "$sales.salesByCategory"
}, {
$fill: {
output: {
"sales.salesByCategory.totalSales": {
value: 0
}
}
}
}, {
$group: {
_id: "$_id",
name: {
$first: "$name"
},
salesByCategory: {
$push: "$sales.salesByCategory"
}
}
}])
Bu sorgu tarafından döndürülen ilk iki sonuç şunlardır:
[
{
"_id": "affdc09c-7356-4fff-a857-e8301f57159c",
"name": "First Up Consultants | Sports Gear Pantry - Wildermanhaven",
"salesByCategory": [
{
"categoryName": "Baseball Gear",
"totalSales": 33878
},
{
"categoryName": "Volleyball Gear",
"totalSales": 34031
}
]
},
{
"_id": "1cf667b4-d8ce-4f1a-bad1-a1f0bbce26c2",
"name": "First Up Consultants | Picture Frame Variety - New Abrahamborough",
"salesByCategory": [
{
"categoryName": "Picture Hanging Supplies",
"totalSales": 7229
},
{
"categoryName": "Collage Frames",
"totalSales": 40014
}
]
}
]
Örnek 2: Devam eden son gözlemi kullanarak eksik personel verilerini doldurma
Bu sorgu, her depo grubundaki bilinen son değeri kullanarak eksik yarı zamanlı personel verilerini doldurur.
db.stores.aggregate([{
$fill: {
sortBy: {
"_id": 1
},
output: {
"staff.totalStaff.partTime": {
method: "locf"
}
}
}
}, {
$project: {
name: 1,
"staff.totalStaff": 1
}
}])
Bu sorgu tarafından döndürülen ilk iki sonuç şunlardır:
[
{
"_id": "00003278-4226-4ca7-871d-e80d8f414431",
"name": "Wide World Importers | Camera Depot - Lake Luramouth",
"staff": {
"totalStaff": {
"fullTime": 20,
"partTime": 6
}
}
},
{
"_id": "00009bd0-c44e-4cc8-ab03-347076d74a1a",
"name": "Wide World Importers | Music Stop - Rebeccaside",
"staff": {
"totalStaff": {
"fullTime": 9,
"partTime": 0
}
}
}
]
Örnek 3: Eksik indirim yüzdelerini ortalama değerle doldurma
Bu sorgu, eksik indirim yüzdelerini tüm mağazalardaki ortalama indirim yüzdesiyle doldurur.
db.stores.aggregate([
{ $unwind: "$promotionEvents" },
{ $unwind: "$promotionEvents.discounts" },
{
$fill: {
partitionBy: "$promotionEvents.eventName",
sortBy: { "promotionEvents.discounts.categoryName": 1 },
output: {
"promotionEvents.discounts.discountPercentage": {
value: { $avg: "$promotionEvents.discounts.discountPercentage" }
}
}
}
},
{
$group: {
_id: { storeId: "$_id", eventName: "$promotionEvents.eventName" },
storeName: { $first: "$name" },
eventName: { $first: "$promotionEvents.eventName" },
discounts: { $push: "$promotionEvents.discounts" }
}
}
])
Bu sorgu tarafından döndürülen ilk iki sonuç şunlardır:
[
{
"_id": {
"storeId": "70d4cc90-23b1-46e3-8f59-630648e311a4",
"eventName": "Price Slash Spectacular"
},
"storeName": "Wide World Importers | Music Bazaar - West Johnpaulhaven",
"eventName": "Price Slash Spectacular",
"discounts": [
{
"categoryName": "CDs",
"discountPercentage": 22
},
{
"categoryName": "Vinyl Records",
"discountPercentage": 21
}
]
},
{
"_id": {
"storeId": "24873ac4-b2d1-4216-a425-3375a384b23d",
"eventName": "Massive Deal Mania"
},
"storeName": "Northwind Traders | Furniture Pantry - Farrellchester",
"eventName": "Massive Deal Mania",
"discounts": [
{
"categoryName": "Bookcases",
"discountPercentage": 22
},
{
"categoryName": "Cabinets",
"discountPercentage": 8
}
]
}
]
Kullanım Örnekleri
- Veri Temizleme: İçeri aktarılan veri kümelerindeki eksik değerleri doldurma
- Zaman Serisi Verileri: İlişkilendirme kullanarak sıralı verilerdeki boşlukları işleme
- Varsayılan Değerler: İsteğe bağlı alanlara varsayılan değerler atama
- Veri Normalleştirme: Belgeler arasında tutarlı veri yapısı sağlayın