$sort

Die $sort-Phase in der Aggregationspipeline wird verwendet, um die Dokumente in der Pipeline nach einem bestimmten Feld oder bestimmten Feldern zu sortieren. In dieser Phase können Sie Daten sortieren und etwa Umsätze nach Betrag oder Ereignisse nach Datum anordnen.

Syntax

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

Die Parameter

Parameter Description
field Das Feld für die Sortierung
sort order Die Reihenfolge, in der das Feld sortiert werden soll. 1 für aufsteigende Reihenfolge und -1 für absteigende Reihenfolge

Examples

Betrachten Sie dieses Beispieldokument aus der Stores-Sammlung.

{
    "_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
                }
            ]
        }
    ]
}

Beispiel 1: Sortieren nach Gesamtumsatz in sescending order

So sortieren Sie die Umsatzkategorien nach deren Gesamtumsatz in absteigender Reihenfolge:

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

Die ersten beiden Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:

[
    {
        "_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
                    }
                ]
            }
        }
    }
]

Beispiel 2: Sortieren nach Startdatum des Ereignisses in aufsteigender Reihenfolge

So sortieren Sie die Promo-Ereignisse nach ihrem Startdatum in aufsteigender Reihenfolge:

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

Die ersten beiden Ergebnisse, die von dieser Abfrage zurückgegeben werden, sind:

[
    {
        "_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"
                    }
                }
            ]
        }
    }
]

Beispiel 3: Sortieren eines Arrays von Objekten

Im Beispiel wird das salesByCategory Array basierend auf dem totalSales Feld in aufsteigender Reihenfolge sortiert.

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