Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tahap $sortByCount dalam alur agregasi digunakan untuk mengelompokkan dokumen menurut ekspresi tertentu lalu mengurutkan jumlah dokumen di setiap grup dalam urutan menurun. Tahap ini berguna untuk mengidentifikasi nilai yang paling umum dalam himpunan $sortByCount data dengan cepat.
Syntax
{
$sortByCount: <expression>
}
Parameter-parameternya
| Pengaturan | Description |
|---|---|
expression |
Ini adalah bidang atau ekspresi komputasi untuk mengelompokkan dan menghitung dokumen. |
Examples
Pertimbangkan dokumen sampel ini dari koleksi toko.
{
"_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
}
]
}
]
}
Contoh 1: Mengelompokkan peristiwa promosi berdasarkan nama dan menghitung kemunculan dalam urutan turun
Untuk mengelompokkan menurut bidang eventName dan menghitung jumlah kemunculan setiap nama peristiwa, mengurutkan hasil dalam urutan turun hitungan
db.stores.aggregate([
{ $unwind: "$promotionEvents" },
{ $sortByCount: "$promotionEvents.eventName" }
])
Kueri ini mengembalikan hasil berikut:
[
{ "_id": "Crazy Deal Days", "count": 4239 },
{ "_id": "Markdown Madness", "count": 2967 },
{ "_id": "Bargain Bonanza", "count": 2925 },
{ "_id": "Crazy Discount Days", "count": 2922 },
{ "_id": "Price Smash Spectacular", "count": 2915 },
{ "_id": "Super Saver Spectacular", "count": 2900 },
{ "_id": "Crazy Markdown Madness", "count": 2899 },
{ "_id": "Price Cut Carnival", "count": 2868 },
{ "_id": "Grand Bargain Bash", "count": 2849 },
{ "_id": "Bargain Blitz Bash", "count": 2843 },
{ "_id": "Grand Savings Gala", "count": 2826 },
{ "_id": "Super Saver Fiesta", "count": 1551 },
{ "_id": "Major Deal Days", "count": 1548 },
{ "_id": "Price Slash Carnival", "count": 1535 },
{ "_id": "Super Discount Days", "count": 1533 },
{ "_id": "Big Deal Bonanza", "count": 1533 },
{ "_id": "Incredible Savings Showcase", "count": 1531 },
{ "_id": "Unbeatable Savings Spectacular", "count": 1518 },
{ "_id": "Fantastic Deal Days", "count": 1511 },
{ "_id": "Flash Bargain Frenzy", "count": 1504 }
]
Alur ini akan:
- Gunakan $unwind untuk mendekonstruksi bidang array promotionEvents dari dokumen input.
- Gunakan $sortByCount untuk mengelompokkan menurut bidang eventName dan menghitung jumlah kemunculan setiap nama peristiwa, mengurutkan hasil dalam urutan menurut dari hitungan.