Freigeben über


$sort (Aggregation)

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

Die Syntax für die $sort-Phase lautet wie folgt:

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

Parameter

BESCHREIBUNG
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

Beispiele

Beispiel 1: Sortieren nach Gesamtumsatz in absteigender Reihenfolge

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

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

Beispielausgabe

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

Beispielausgabe

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