Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A $fill szakasz a hiányzó vagy null értékek kitöltésére szolgál az összesítési folyamat dokumentumaiban. Különböző módszereket kínál a hiányzó adatok feltöltésére, beleértve a statikus értékeket, a lineáris interpolációt vagy az előző/következő dokumentumok értékeit.
Szemantika
{
$fill: {
sortBy: <sort specification>,
partitionBy: <partition fields>,
partitionByFields: <array of partition field names>,
output: {
<field1>: { value: <expression> },
<field2>: { method: <string> }
}
}
}
Paraméterek
| Paraméter | Description |
|---|---|
sortBy |
A dokumentumok rendezési sorrendjét adja meg a dokumentumrendtől függő kitöltési módszerek alkalmazásakor. |
partitionBy |
Opcionális. Dokumentumok csoportosítása partíciókba. A kitöltőműveleteket a rendszer külön alkalmazza az egyes partíciókon. |
partitionByFields |
Opcionális. A partitionBy alternatív szintaxisa mezőnevek tömbjének használatával. |
output |
Megadja a kitöltendő mezőket, valamint a hiányzó adatok kitöltéséhez használandó metódust vagy értéket. |
Kitöltési módszerek
| Metódus | Description |
|---|---|
value |
Adjon meg egy megadott statikus értéket vagy kifejezési eredményt. |
linear |
Kitöltés ismert értékek közötti lineáris interpolációval (csak numerikus mezők esetén). |
locf |
Utolsó továbbvitt megfigyelés – használja az utolsó ismert értéket. |
linear |
Lineáris interpoláció a környező értékek között. |
Példák
Tekintse át ezt a mintadokumentumot az áruházak gyűjteményéből.
{
"_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
}
]
}
]
}
1. példa: Hiányzó értékek kitöltése statikus értékkel
Ez a lekérdezés a totalSales tömb hiányzó salesByCategory értékeit tölti ki 0 alapértelmezett értékkel.
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"
}
}
}])
A lekérdezés által visszaadott első két eredmény a következő:
[
{
"_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
}
]
}
]
2. példa: Hiányzó alkalmazottak adatainak kitöltése az utolsó elvégzett megfigyeléssel
Ez a lekérdezés kitölti a hiányzó részmunkaidős alkalmazottak adatait az egyes áruházcsoportok utolsó ismert értékével.
db.stores.aggregate([{
$fill: {
sortBy: {
"_id": 1
},
output: {
"staff.totalStaff.partTime": {
method: "locf"
}
}
}
}, {
$project: {
name: 1,
"staff.totalStaff": 1
}
}])
A lekérdezés által visszaadott első két eredmény a következő:
[
{
"_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
}
}
}
]
3. példa: Hiányzó kedvezmény százalékos értékének kitöltése átlagértékkel
Ez a lekérdezés kitölti a hiányzó kedvezmény százalékos értékét az összes üzlet átlagos kedvezményszázalékával.
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" }
}
}
])
A lekérdezés által visszaadott első két eredmény a következő:
[
{
"_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
}
]
}
]
Használati esetek
- Adattisztítás: Hiányzó értékek kitöltése importált adathalmazokban
- Idősoradatok: A szekvenciális adatok hézagainak kezelése interpolációval
- Alapértelmezett értékek: Alapértelmezett értékek hozzárendelése választható mezőkhöz
- Adat normalizálása: Egységes adatstruktúra biztosítása a dokumentumok között