- 
    Type:
New Feature
 - 
    Resolution: Done
 - 
    Priority:
Major - P3
 - 
    Affects Version/s: None
 - 
    Component/s: Builders
 - 
    None
 
- 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 
Syntax
{
  $facet: {
    facetName1: [<stage1>, <stage2>, <stage3>],
    facetName2: [<stage4>, <stage5>, …],
    ...
  }
}
Examples
> db.example.insert([
    {
      _id: "product1",
      avgReview: 4.3,
      price: 21,
      category: "TVs",
      title: "Sony 42 inch HDTV",
      attributes: [
        {name: "type", value: "HD"},
        {name: "screen size", value: 42},
        {name: "manufacturer", value: "Sony"},
        ...
      ]
    }
    ...
])
> db.example.aggregate([
{$match: {category: "TVs"}},  // Match all relevant results.
{$facet: {
  "Screen Sizes": [
     {$unwind: "$attributes"},
     {$match: {"attributes.name": "screen size"}},
     {$group: {
         _id: { /* Use $switch to compute buckets for screen sizes */ },
         count: {$sum: 1}
     }}
   ],
   "Manufacturer": [
     {$match: {"attributes.name": "manufacturer"}},
     {$group: {_id: "$attributes.value", count: {$sum: 1}}},
     {$sort: {count: -1}}
     {$limit: 5}
   ]
}}
])
// Output.
{
  "Screen Size": [
    {_id: {min: MinKey, max: 32}, count: 32},
    {_id: {min: 32, max: 42}, count: 32},
    {_id: {min: 42, max: 50}, count: 33},
    {_id: {min: 50, max: MaxKey}, count: 33}
  ],
  "Manufacturer": [
    {_id: "Sony", count: 54},
    {_id: "Samsung", count: 45},
    {_id: "LG", count: 34},
    {_id: "Sharp", count: 22},
    {_id: "Vizio", count: 14},
  ]
}   
Behavior
- names of sub-pipelines (keys in the document) must be unique.
 - This is a blocking stage.
 
- depends on
 - 
                    
SERVER-23654 Add $facet aggregation stage
-         
 - Closed
 
 -         
 
- is depended on by
 - 
                    
DRIVERS-297 Aggregation Framework Support for 3.4
-         
 - Closed
 
 -