Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
$group Toplama aşaması, belgeleri belirtilen tanımlayıcı ifadelerine göre gruplandırıyor ve her grup için hesaplanan alanlar oluşturmak için biriktirici ifadeleri uyguluyor. Bu aşama, veri toplama ve özetleme işlemleri için gereklidir.
Sözdizimi
{
$group: {
_id: <expression>,
<field1>: { <accumulator1>: <expression1> },
<field2>: { <accumulator2>: <expression2> }
}
}
Parametreler
| Parametre | Description |
|---|---|
_id |
Gerekli. Gruplandırma ölçütü olarak ifade. Tüm giriş belgeleri için birikmiş değerleri hesaplamak için null kullanın. |
field |
Optional. $sum, $avg, $max, $min, $count vb. gibi biriktirici işleçleri kullanılarak hesaplanır. |
Örnekler
Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.
{
"_id": "2cf3f885-9962-4b67-a172-aa9039e9ae2f",
"name": "First Up Consultants | Bed and Bath Center - South Amir",
"location": {
"lat": 60.7954,
"lon": -142.0012
},
"staff": {
"totalStaff": {
"fullTime": 18,
"partTime": 17
}
},
"sales": {
"totalSales": 37701,
"salesByCategory": [
{
"categoryName": "Mattress Toppers",
"totalSales": 37701
}
]
},
"promotionEvents": [
{
"eventName": "Price Drop Palooza",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 30
}
},
"discounts": [
{
"categoryName": "Bath Accessories",
"discountPercentage": 18
},
{
"categoryName": "Pillow Top Mattresses",
"discountPercentage": 17
}
]
}
]
}
Örnek 1: Personel analizini şehre göre gruplandırma
Bu sorgu, şehirlere göre depolar ve farklı konumlardaki personel desenlerini analiz eder.
db.stores.aggregate([
{
$group: {
_id: "$city",
totalFullTimeStaff: { $sum: "$staff.employeeCount.fullTime" },
totalPartTimeStaff: { $sum: "$staff.employeeCount.partTime" },
avgFullTimeStaff: { $avg: "$staff.employeeCount.fullTime" },
storesInCity: { $count: {} }
}
},
{
$project: {
city: "$_id",
totalFullTimeStaff: 1,
totalPartTimeStaff: 1,
avgFullTimeStaff: { $round: ["$avgFullTimeStaff", 1] },
storesInCity: 1,
fullTimeRatio: {
$round: [
{ $divide: ["$totalFullTimeStaff", { $add: ["$totalFullTimeStaff", "$totalPartTimeStaff"] }] },
2
]
}
}
},
{ $limit : 2}
])
Bu sorgu tarafından döndürülen ilk iki sonuç şunlardır:
[
{
"_id": "New Ellsworth",
"totalFullTimeStaff": 11,
"totalPartTimeStaff": 1,
"avgFullTimeStaff": 11,
"storesInCity": 1,
"city": "New Ellsworth",
"fullTimeRatio": 0.92
},
{
"_id": "Jalonborough",
"totalFullTimeStaff": 4,
"totalPartTimeStaff": 1,
"avgFullTimeStaff": 4,
"storesInCity": 1,
"city": "Jalonborough",
"fullTimeRatio": 0.8
}
]