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 $reduce operator wordt gebruikt om een expressie toe te passen op elk element in een matrix en de resultaten in één waarde te verzamelen. Deze operator is handig voor het uitvoeren van bewerkingen die moeten worden herhaald over matrixelementen en het aggregeren van hun waarden.
Syntaxis
$reduce: {
input: <array>,
initialValue: <expression>,
in: <expression>
}
Parameterwaarden
| Kenmerk | Description |
|---|---|
input |
De matrix die moet worden herhaald. |
initialValue |
De initiële cumulatieve waarde die is ingesteld voordat de matrix-iteratie begint. |
in |
Een geldige expressie die de samengevoegde waarde evalueert voor elk element in de matrix. |
Voorbeelden
Bekijk dit voorbeelddocument uit de winkelverzameling.
{
"_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
}
]
}
]
}
Voorbeeld 1: de matrixwaarden aggregeren
Deze query laat zien hoe $reduce u de totale verkoop kunt optellen voor verschillende categorieën in de salesByCategory matrix.
db.stores.aggregate([{
$match: {
_id: "988d2dd1-2faa-4072-b420-b91b95cbfd60"
}
}, {
$project: {
totalSalesByCategory: {
$reduce: {
input: "$sales.salesByCategory.totalSales",
initialValue: 0,
in: {
$add: ["$$value", "$$this"]
}
}
}
}
}])
De query retourneert het volgende resultaat.
[
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"totalSalesByCategory": 149849
}
]
Verwante inhoud
- Bekijk de opties voor het migreren van MongoDB naar Azure DocumentDB.
- Lees meer over functiecompatibiliteit met MongoDB.