$sort

Tahap $sort dalam alur agregasi digunakan untuk mengurutkan dokumen dalam alur dengan bidang atau bidang tertentu. Tahap ini membantu Anda mengurutkan data, seperti mengatur penjualan menurut jumlah atau peristiwa menurut tanggal.

Syntax

{
    $sort: {
        < field1 >: < sort order > ,
        < field2 >: < sort order >
    }
}

Parameter-parameternya

Pengaturan Description
field Bidang yang akan diurutkan menurut
sort order Urutan di mana kita harus mengurutkan bidang . 1 untuk urutan naik dan -1 untuk urutan turun.

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: Mengurutkan berdasarkan total penjualan dalam urutan naik

Untuk mengurutkan kategori penjualan menurut total penjualan mereka dalam urutan menurut:

db.collection.aggregate([
  {
    $unwind: "$store.sales.salesByCategory"
  },
  {
    $sort: { "store.sales.salesByCategory.totalSales": -1 }
  }
])

Dua hasil pertama yang dikembalikan oleh kueri ini adalah:

[
    {
        "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
        "store": {
            "name": "Downtown Store",
            "sales": {
                "salesByCategory": [
                    {
                        "category": "Electronics",
                        "totalSales": 15000
                    },
                    {
                        "category": "Clothing",
                        "totalSales": 12000
                    },
                    {
                        "category": "Home Goods",
                        "totalSales": 10000
                    }
                ]
            }
        }
    },
    {
        "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c6",
        "store": {
            "name": "Uptown Store",
            "sales": {
                "salesByCategory": [
                    {
                        "category": "Electronics",
                        "totalSales": 20000
                    },
                    {
                        "category": "Clothing",
                        "totalSales": 18000
                    },
                    {
                        "category": "Home Goods",
                        "totalSales": 15000
                    }
                ]
            }
        }
    }
]

Contoh 2: Mengurutkan menurut tanggal mulai peristiwa dalam urutan naik

Untuk mengurutkan acara promosi menurut tanggal mulainya dalam urutan naik:

db.collection.aggregate([
  {
    $unwind: "$store.promotionEvents"
  },
  {
    $sort: { "store.promotionEvents.promotionalDates.startDate": 1 }
  }
])

Dua hasil pertama yang dikembalikan oleh kueri ini adalah:

[
    {
        "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
        "store": {
            "name": "Downtown Store",
            "promotionEvents": [
                {
                    "eventName": "Summer Sale",
                    "promotionalDates": {
                        "startDate": "2024-06-01T00:00:00Z",
                        "endDate": "2024-06-30T23:59:59Z"
                    }
                },
                {
                    "eventName": "Black Friday",
                    "promotionalDates": {
                        "startDate": "2024-11-25T00:00:00Z",
                        "endDate": "2024-11-25T23:59:59Z"
                    }
                },
                {
                    "eventName": "Holiday Deals",
                    "promotionalDates": {
                        "startDate": "2024-12-01T00:00:00Z",
                        "endDate": "2024-12-31T23:59:59Z"
                    }
                }
            ]
        }
    },
    {
        "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c6",
        "store": {
            "name": "Uptown Store",
            "promotionEvents": [
                {
                    "eventName": "Back to School",
                    "promotionalDates": {
                        "startDate": "2024-08-01T00:00:00Z",
                        "endDate": "2024-08-31T23:59:59Z"
                    }
                },
                {
                    "eventName": "Winter Sale",
                    "promotionalDates": {
                        "startDate": "2024-12-01T00:00:00Z",
                        "endDate": "2024-12-31T23:59:59Z"
                    }
                }
            ]
        }
    }
]

Contoh 3: Mengurutkan array objek

Contoh mengurutkan salesByCategory array di tempat berdasarkan totalSales bidang dalam urutan naik.

db.stores.updateOne({
            _id: "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5"
        }, {
            $push: {
                "sales.salesByCategory": {
                    $each: [],
                    $sort: {
                        totalSales: 1
                    }
                }
            }
        }
)