$reduce (espressione di matrice)
SI APPLICA A: MongoDB vCore
L'operatore $reduce
viene usato per applicare un'espressione a ogni elemento di una matrice e accumulare i risultati in un singolo valore. Questo operatore è particolarmente utile per eseguire operazioni che richiedono l'iterazione sugli elementi della matrice e l'aggregazione dei relativi valori.
Sintassi
$reduce: {
input: <array>,
initialValue: <expression>,
in: <expression>
}
Parametri
Descrizione | |
---|---|
input |
Matrice su cui eseguire l'iterazione. |
initialValue |
Valore cumulativo iniziale impostato prima dell'inizio dell'iterazione della matrice. |
in |
Espressione valida che restituisce il valore accumulato per ogni elemento nella matrice. |
Esempio
Si esaminerà ora l'utilizzo con json di esempio dal stores
set di dati.
{
"_id": "d3c9df51-41bd-4b4e-a26b-b038d9cf8b45",
"location": {
"lat": -67.7571,
"lon": 97.2505
},
"sales": {
"totalSales": 149849,
"salesByCategory": [
{
"categoryName": "DJ Speakers",
"totalSales": 36972
},
{
"categoryName": "DJ Headphones",
"totalSales": 12877
},
{
"categoryName": "Music Accessories",
"totalSales": 40000
},
{
"categoryName": "DJ Accessories",
"totalSales": 60000
}
]
},
"tag": [
"#ShopLocal",
"#FashionStore",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
Esempio 1: Aggrega i valori della matrice
Nell'esempio viene illustrato come usare $reduce
per sommare le vendite totali tra categorie diverse nella salesByCategory
matrice.
db.stores.aggregate([
{ $match: { "_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60"} }
, {
$project: {
totalSalesByCategory: {
$reduce: {
input: "$sales.salesByCategory.totalSales",
initialValue: 0,
in: { $add: ["$$value", "$$this"] }
}
}
}
}
])
La query restituisce totalSales
tra le categorie.
{
"_id": "988d2dd1-2faa-4072-b420-b91b95cbfd60",
"totalSalesByCategory": 149849
}
Contenuto correlato
- Esaminare le opzioni per la migrazione da MongoDB ad Azure Cosmos DB per MongoDB (vCore)
- Altre informazioni sulla compatibilità delle funzionalità con MongoDB