Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der $avg
Akkumulator berechnet den Mittelwert numerischer Werte. Es wird häufig in Aggregationspipelines verwendet, z $group
. B. in , , $bucket
, $bucketAuto
oder $setWindowFields
. Dieser Vorgang ist hilfreich für die Berechnung der Durchschnittswerte in Gruppen von Dokumenten oder in definierten Fenstern.
Syntax
$avg: <expression>
Die Parameter
Parameter | BESCHREIBUNG |
---|---|
<expression> |
Gibt das Feld oder den Ausdruck an, um den Mittelwert zu berechnen. Nicht numerische Werte werden ignoriert. |
Beispiele
Lassen Sie uns die Verwendung mit Dokumenten verstehen, die gemäß diesem Schema strukturiert sind.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Bargain Blitz Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 2,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Turntables",
"discountPercentage": 18
},
{
"categoryName": "DJ Mixers",
"discountPercentage": 15
}
]
}
],
"tag": [
"#ShopLocal",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
],
"company": "Lakeshore Retail",
"city": "Port Cecile",
"lastUpdated": {
"$date": "2024-12-11T10:21:58.274Z"
}
}
Beispiel 1: Berechnen des durchschnittlichen Umsatzes nach Kategorie
In diesem Beispiel wird der Mittelwert totalSales
für jedes categoryName
Array salesByCategory
berechnet.
db.stores.aggregate([
{ $unwind: "$sales.salesByCategory" },
{
$group: {
_id: "$sales.salesByCategory.categoryName",
avgSales: { $avg: "$sales.salesByCategory.totalSales" }
}
}
])
Diese Abfrage würde das folgende Dokument zurückgeben.
[
{ _id: 'Christmas Trees', avgSales: 25987.956989247312 },
{ _id: 'Nuts', avgSales: 25115.98795180723 },
{ _id: 'Camping Tables', avgSales: 25012.546153846153 },
{ _id: 'Music Theory Books', avgSales: 26138.80769230769 },
{ _id: 'Fortified Wine', avgSales: 24748.672727272726 },
{ _id: "Children's Mystery", avgSales: 23764.044444444444 },
{ _id: 'Short Throw Projectors', avgSales: 27157.472222222223 },
{ _id: 'Pliers', avgSales: 26712.875 },
{ _id: 'Bluetooth Headphones', avgSales: 26311.58653846154 },
{ _id: 'Video Storage', avgSales: 26121.475 },
{ _id: 'Cleansers', avgSales: 25836.397058823528 },
{ _id: 'Camera Straps', avgSales: 22487.609375 },
{ _id: 'Carry-On Bags', avgSales: 24294.263157894737 },
{ _id: 'Disinfectant Wipes', avgSales: 27066.929411764704 },
{ _id: 'Insignia Smart TVs', avgSales: 27096.83950617284 },
{ _id: 'Toner Refill Kits', avgSales: 24963.71052631579 },
{ _id: 'iPads', avgSales: 22583.882352941175 },
{ _id: 'Memory Foam Mattresses', avgSales: 28073.05172413793 },
{ _id: 'Storage Baskets', avgSales: 24092.514705882353 },
{ _id: 'Body Spray', avgSales: 26080.84375 }
]
Beispiel 2: Verwenden $avg
in $bucket
In diesem Beispiel werden Buckets basierend auf Verkaufswerten erstellt und der durchschnittliche Verkaufswert für jeden Bucket berechnet.
db.stores.aggregate([
{
$bucket: {
groupBy: "$sales.totalSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
avgSales: { $avg: "$sales.totalSales" }
}
}
}
])
Diese Abfrage würde das folgende Dokument zurückgeben.
[
{ _id: 1000, avgSales: 3029.053674121406 },
{ _id: 'Other', avgSales: 52169.85442987472 },
{ _id: 0, avgSales: 576.3164179104477 },
{ _id: 5000, avgSales: 7538.786819770345 }
]
Beispiel 3: Verwenden in $avg
$setWindowFields
Um den durchschnittlichen Rabatt für die Kategorie "Laptops" nach Unternehmen zu erhalten, im Jahr 2023:
db.stores.aggregate([
{ $unwind: "$promotionEvents" },
{ $unwind: "$promotionEvents.discounts" },
// Filter only Laptops category and events in 2023
{
$match: {
"promotionEvents.promotionalDates.startDate.Year": 2023,
"promotionEvents.discounts.categoryName": "Laptops"
}
},
// Use $setWindowFields to calculate average discount by city
{
$setWindowFields: {
partitionBy: "$company",
output: {
avgDiscount: {
$avg: "$promotionEvents.discounts.discountPercentage",
window: { documents: ["unbounded", "unbounded"] }
}
}
}
},
// Group by city to return one result per city
{
$group: {
_id: "$company",
avgDiscount: { $first: "$avgDiscount" }
}
}
])
Diese Abfrage würde das folgende Dokument zurückgeben.
[
{ _id: 'Boulder Innovations', avgDiscount: 14.5 },
{ _id: 'VanArsdel, Ltd.', avgDiscount: 14.461538461538462 },
{ _id: 'Proseware, Inc.', avgDiscount: 16.25 },
{ _id: 'Fabrikam, Inc.', avgDiscount: 14.454545454545455 },
{ _id: 'Contoso, Ltd.', avgDiscount: 14.384615384615385 },
{ _id: 'Fourth Coffee', avgDiscount: 13.625 },
{ _id: 'Trey Research', avgDiscount: 17.785714285714285 },
{ _id: 'Adatum Corporation', avgDiscount: 11.666666666666666 },
{ _id: 'Relecloud', avgDiscount: 14.375 },
{ _id: 'Lakeshore Retail', avgDiscount: 15.846153846153847 },
{ _id: 'Northwind Traders', avgDiscount: 14.2 },
{ _id: 'First Up Consultants', avgDiscount: 11.25 },
{ _id: 'Wide World Importers', avgDiscount: 15.571428571428571 },
{ _id: 'Tailwind Traders', avgDiscount: 16.166666666666668 }
]
Verwandte Inhalte
- Prüfen Sie die Optionen für die Migration von MongoDB zu Azure Cosmos DB for MongoDB (virtueller Kern).
- Erfahren Sie mehr über die Featurekompatibilität mit MongoDB