Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Operatorn $locf sprider det senast observerade icke-null-värdet framåt i en partition i en fönsterfråga. Operatorn $locf är särskilt användbar för att fylla saknade datapunkter i tidsseriedata eller andra datauppsättningar med luckor.
Syntax
{
$locf: {
input: <expression>,
sortBy: <document>
}
}
Parameterar
| Parameter | Description |
|---|---|
input |
Uttrycket som matchar det fält vars värde du vill sprida. |
sortBy |
Ett dokument som anger sorteringsordningen för partitionen. |
Examples
Överväg det här exempeldokumentet från butiksamlingen.
{
"_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
}
]
}
]
}
Exempel 1: Använda $locf för att fylla saknade tidsseriedata
Om du vill sprida det senaste icke-null-värdet för fältet lastUpdated mellan butiker i företaget "First Up Consultants" kör du först en fråga för att partitionera butikerna i företaget. Använd sedan operatorn $lecf för att sprida det sista värdet som inte är null för fältet för alla butiker i partitionen.
db.stores.aggregate([{
"$match": {
"company": {
"$in": ["First Up Consultants"]
}
}
}, {
"$setWindowFields": {
"partitionBy": "$name",
"sortBy": {
"sales.revenue": 1
},
"output": {
"lastUpdatedDate": {
"$locf": {
"lastUpdated": 1
}
}
}
}
}, {
"$project": {
"company": 1,
"name": 1,
"lastObservedDiscount": 1
}
}])
De första tre resultaten som returneras av den här frågan är:
[
{
"_id": "0f4c48fe-c43b-4083-a856-afe6dd902077",
"name": "First Up Consultants | Appliance Bargains - Feilmouth",
"company": "First Up Consultants"
},
{
"_id": "c4883253-7ccd-4054-a7e0-8aeb202307b5",
"name": "First Up Consultants | Appliance Bargains - New Kari",
"company": "First Up Consultants"
},
{
"_id": "a159ff5c-6ec5-4ca8-9672-e8903a54dd90",
"name": "First Up Consultants | Appliance Bargains - Schadenstad",
"company": "First Up Consultants"
}
]
Relaterat innehåll
- Granska alternativen för att migrera från MongoDB till Azure DocumentDB.
- Läs mer om funktionskompatibilitet med MongoDB.