$median

The `$median` accumulator operator calculates the median value of a numeric field in a group of documents. It's useful for finding the middle value in a distribution of data.

Syntax

{
  $group: {
    _id: <expression>,
    medianValue: {
      $median: {
        input: <field or expression>,
        method: <>
      }
    }
  }
}

Parameters

inputobjectrequired

The field or expression from which to calculate the median.

methodstringrequired

The method to use for calculating the median. Typically "approximate".

Examples

Sample Data

{
  "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
  "name": "First Up Consultants | Beverage Shop",
  "sales": {
    "totalSales": 75670,
    "salesByCategory": [
      { "categoryName": "Wine Accessories", "totalSales": 34440 },
      { "categoryName": "Bitters", "totalSales": 39496 },
      { "categoryName": "Rum", "totalSales": 1734 }
    ]
  }
}

Calculate the median sales volume

Calculate the median sales volume within each category across all stores.

This query groups documents by distinct sales categories and calculates the median sales within each category.

Query:

db.stores.aggregate([
  { $unwind: "$sales.salesByCategory" },
  {
    $group: {
      _id: "$sales.salesByCategory.categoryName",
      medianSales: {
        $median: {
          input: "$sales.salesByCategory.totalSales",
          method: "approximate"
        }
      }
    }
  }
])

Output:

[
  { "_id": "Light Bulbs", "medianSales": 24845 },
  { "_id": "Christmas Trees", "medianSales": 28210 },
  { "_id": "Ukuleles", "medianSales": 27295 },
  { "_id": "GPUs", "medianSales": 19813 },
  { "_id": "Towels", "medianSales": 27771 }
]

Related