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.
Az $densify aggregációs folyamat szakasza a hiányzó adatpontok értéksorozaton belüli kitöltésére szolgál. Segít a teljesebb adathalmaz létrehozásában azáltal, hogy hiányzó értékeket hoz létre egy megadott mező, tartomány és lépés alapján. Ez olyan helyzetekben hasznos, mint az idősoros adatelemzés, ahol az adatpontok közötti réseket ki kell tölteni a pontos elemzés érdekében.
Szemantika
{
$densify: {
field: <field>,
range: {
step: <number>,
unit: <string>, // Optional, e.g., "hour", "day", "month", etc.
bounds: [<lowerBound>, <upperBound>] // Optional
},
partitionByFields: [<field1>, <field2>, ...] // Optional
}
}
Paraméterek
| Paraméter | Description |
|---|---|
field |
Az a mező, amelyen a densification végrehajtása történik. |
range.step |
A hiányzó értékek generálásának lépésmérete. |
range.unit |
(Nem kötelező) A lépésméret mértékegysége, például időegységek (pl. "óra", "nap"). |
range.bounds |
(Nem kötelező) Megadja a densification tartományát (alsó és felső határ). |
partitionByFields |
(Nem kötelező) A denszifikáció adatainak csoportosításához használt mezők. |
Példák
Tekintse át ezt a mintadokumentumot az áruházak gyűjteményéből.
{
"_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
}
]
}
]
}
1. példa: Idősoros adatkészlet densifyálása
Ez a lekérdezés kitölti a hiányzó napokat a dátummezőben.
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"
}
}
}
]);
Ez a lekérdezés a következő eredményeket adja vissza:
[
{
"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
}
]
2. példa: Numerikus adatok densifyálása
Ez a lekérdezés hiányzó numerikus értékeket tölt ki a sales.fullSales mezőben:
db.aggregate([
{
$documents: [
{ level: 1, score: 10 },
{ level: 3, score: 30 }
]
},
{
$densify: {
field: "level",
range: {
step: 1,
bounds: [1, 5]
}
}
}
]);
Ez a lekérdezés a következő eredményeket adja vissza:
[
{
"level": 1,
"score": 10
},
{
"level": 2
},
{
"level": 3,
"score": 30
},
{
"level": 4
}
]
Korlátozások
Az alábbi táblázat összefoglalja az összesítési folyamatok $densify szakaszához kapcsolódó fő korlátozásokat és viselkedéseket:
| Kategória | Feltétel / Viselkedés |
|---|---|
| Mezőkorlátozások | – Hiba, ha egy dokumentum dátumértékekkel rendelkezik, és unitnincs megadva. – Hibák, ha bármely dokumentum numerikus értékkel rendelkezik, és unitmeg van adva. - A mező neve a következővel $kezdődik: . Átnevezheti $project . |
| partitionByFields | – Bármely mező nem sztring értékű. - A mező neve a következővel $kezdődik: . |
| range.bounds |
-
Az alsó határ a kezdőértéket határozza meg, a meglévő dokumentumoktól függetlenül. - Az alsó határ a befogadó. - A felső határ kizárólagos. - $densify
nem szűri ki a határokon kívüli dokumentumokat. |