Delen via


aggregate

De aggregate opdracht wordt gebruikt om gegevensrecords te verwerken en berekende resultaten te retourneren. Het voert bewerkingen uit op de gegevens, zoals filteren, groeperen en sorteren, en kan de gegevens op verschillende manieren transformeren. De aggregate opdracht is zeer veelzijdig en wordt vaak gebruikt voor gegevensanalyse en rapportage.

Syntaxis

db.collection.aggregate(pipeline, options)
  • pijplijn: Een matrix van aggregatiefasen die de gegevens verwerken en transformeren.
  • opties: Optioneel. Hiermee geeft u meer opties voor de aggregatie, zoals explain, allowDiskUseen cursor.

Voorbeelden

Voorbeeld 1: De totale verkoop per categorie berekenen

In dit voorbeeld ziet u hoe u de totale verkoop voor elke categorie in de stores verzameling kunt berekenen.

db.stores.aggregate([
  {
    $unwind: "$sales.salesByCategory"
  },
  {
    $group: {
      _id: "$sales.salesByCategory.categoryName",
      totalSales: { $sum: "$sales.salesByCategory.totalSales" }
    }
  }
])

Voorbeelduitvoer

[mongos] StoreData> db.stores.aggregate([
...   {
...     $unwind: "$sales.salesByCategory"
...   },
...   {
...     $group: {
...       _id: "$sales.salesByCategory.categoryName",
...       totalSales: { $sum: "$sales.salesByCategory.totalSales" }
...     }
...   }
... ])

[
  { _id: 'Christmas Trees', totalSales: 3147281 },
  { _id: 'Nuts', totalSales: 3002332 },
  { _id: 'Camping Tables', totalSales: 4431667 }
]
 

Voorbeeld 2: Winkels zoeken met fulltime personeel groter dan 10

In dit voorbeeld ziet u hoe u winkels filtert waarbij het aantal fulltime medewerkers groter is dan 10.

db.stores.aggregate([
  {
    $match: {
      "staff.totalStaff.fullTime": { $gt: 10 }
    }
  }
])

Voorbeelduitvoer

[mongos] StoreData> db.stores.aggregate([
...   {
...     $match: {
...       "staff.totalStaff.fullTime": { $gt: 10 }
...     }
...   }
... ])

[
  {
    _id: '7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5',
    name: "Lenore's DJ Equipment Store",
    location: { lat: -9.9399, lon: -0.334 },
    staff: { totalStaff: { fullTime: 18, partTime: 7 } },
    sales: {
      totalSales: 35911,
      salesByCategory: [ { categoryName: 'DJ Headphones', totalSales: 35911 } ]
    },
    promotionEvents: [
      {
        discounts: [
          { categoryName: 'DJ Turntables', discountPercentage: 18 },
          { categoryName: 'DJ Mixers', discountPercentage: 15 }
        ]
      }
    ],
    tag: [ '#SeasonalSale', '#FreeShipping', '#MembershipDeals' ]
  }
]

Voorbeeld 3: Alle promotieevenementen weergeven met kortingen die groter zijn dan 15%

In dit voorbeeld worden alle promotieevenementen vermeld waarbij elke korting groter is dan 15%.

db.stores.aggregate([
  {
    $unwind: "$promotionEvents"
  },
  {
    $unwind: "$promotionEvents.discounts"
  },
  {
    $match: {
      "promotionEvents.discounts.discountPercentage": { $gt: 15 }
    }
  },
  {
    $group: {
      _id: "$promotionEvents.eventName",
      discounts: { $push: "$promotionEvents.discounts" }
    }
  }
])

Voorbeelduitvoer

[mongos] StoreData> db.stores.aggregate([
...   {
...     $unwind: "$promotionEvents"
...   },
...   {
...     $unwind: "$promotionEvents.discounts"
...   },
...   {
...     $match: {
...       "promotionEvents.discounts.discountPercentage": { $gt: 20 }
...     }
...   },
...   {
...     $group: {
...       _id: "$promotionEvents.eventName",
...       discounts: { $push: "$promotionEvents.discounts" }
...     }
...   }
... ])
[
  {
    [
      { categoryName: 'Basketball Gear', discountPercentage: 23 },
      { categoryName: 'Wool Carpets', discountPercentage: 22 },
      {
        categoryName: 'Portable Bluetooth Speakers',
        discountPercentage: 24
      }
    ]
  }
]