$urutkanBerdasarkanJumlah

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:

  1. Gunakan $unwind untuk mendekonstruksi bidang array promotionEvents dari dokumen input.
  2. Gunakan $sortByCount untuk mengelompokkan menurut bidang eventName dan menghitung jumlah kemunculan setiap nama peristiwa, mengurutkan hasil dalam urutan menurut dari hitungan.