Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De $fill fase wordt gebruikt om ontbrekende of null-waarden in documenten in de aggregatiepijplijn in te vullen. Het biedt verschillende methoden voor het vullen van ontbrekende gegevens, waaronder het gebruik van statische waarden, lineaire interpolatie of waarden uit vorige/volgende documenten.
Syntaxis
{
$fill: {
sortBy: <sort specification>,
partitionBy: <partition fields>,
partitionByFields: <array of partition field names>,
output: {
<field1>: { value: <expression> },
<field2>: { method: <string> }
}
}
}
Parameterwaarden
| Kenmerk | Description |
|---|---|
sortBy |
Hiermee geeft u de sorteervolgorde voor documenten op bij het toepassen van opvulmethoden die afhankelijk zijn van de documentvolgorde. |
partitionBy |
Optional. Groepeert documenten in partities. Vulbewerkingen worden afzonderlijk binnen elke partitie toegepast. |
partitionByFields |
Optional. Alternatieve syntaxis voor partitionBy met behulp van een matrix met veldnamen. |
output |
Hiermee geeft u de velden op die moeten worden ingevuld en de methode of waarde die moet worden gebruikt voor het invullen van ontbrekende gegevens. |
Opvulmethoden
| Methode | Description |
|---|---|
value |
Vul een opgegeven statische waarde of expressieresultaat in. |
linear |
Vul lineaire interpolatie in tussen bekende waarden (alleen numerieke velden). |
locf |
Last Observation Carried Forward - gebruik de laatst bekende waarde. |
linear |
Lineaire interpolatie tussen omringende waarden. |
Voorbeelden
Bekijk dit voorbeelddocument uit de winkelverzameling.
{
"_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
}
]
}
]
}
Voorbeeld 1: Ontbrekende waarden vullen met statische waarde
Met deze query worden ontbrekende totalSales waarden in de salesByCategory matrix ingevuld met een standaardwaarde van 0.
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"
}
}
}])
De eerste twee resultaten die door deze query worden geretourneerd, zijn:
[
{
"_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
}
]
}
]
Voorbeeld 2: Ontbrekende personeelsgegevens invullen met behulp van laatste waarneming die is uitgevoerd
Met deze query worden ontbrekende parttime personeelsgegevens ingevuld met behulp van de laatst bekende waarde binnen elke winkelgroep.
db.stores.aggregate([{
$fill: {
sortBy: {
"_id": 1
},
output: {
"staff.totalStaff.partTime": {
method: "locf"
}
}
}
}, {
$project: {
name: 1,
"staff.totalStaff": 1
}
}])
De eerste twee resultaten die door deze query worden geretourneerd, zijn:
[
{
"_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
}
}
}
]
Voorbeeld 3: Ontbrekende kortingspercentages vullen met gemiddelde waarde
Met deze query worden ontbrekende kortingspercentages ingevuld met het gemiddelde kortingspercentage in alle winkels.
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" }
}
}
])
De eerste twee resultaten die door deze query worden geretourneerd, zijn:
[
{
"_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
}
]
}
]
Gebruiksvoorbeelden
- Gegevens opschonen: ontbrekende waarden in geïmporteerde gegevenssets doorvoeren
- Time Series-gegevens: hiaten in sequentiële gegevens verwerken met behulp van interpolatie
- Standaardwaarden: standaardwaarden toewijzen aan optionele velden
- Gegevensnormalisatie: zorgen voor consistente gegevensstructuur in documenten